mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
In Swift 3 shifts used to be defined on the concrete integer types, so the right-hand-side value in the shift expression could define a type for the result, as in `1 << i32` would have the type Int32. Swift 4 makes shift operators heterogeneous, so now `1 << i32` will result in an Int, according to the type of the left-hand-side value, which gets a default type for integer literals.
105 lines
1.9 KiB
Swift
105 lines
1.9 KiB
Swift
// RUN: %target-run-simple-swift | %FileCheck %s
|
|
// REQUIRES: executable_test
|
|
|
|
import Swift
|
|
|
|
struct BitVector64 {
|
|
var bits : Int64
|
|
|
|
subscript (bit : Int) -> Bool {
|
|
get {
|
|
if (bits & (1 &<< Int64(bit))) != 0 {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
set {
|
|
var mask: Int64 = 1 &<< bit
|
|
if newValue {
|
|
bits = bits | mask
|
|
} else {
|
|
bits = bits & ~mask
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Create an empty bitvector
|
|
var vec = BitVector64(bits: 0)
|
|
|
|
// Set even elements to 'true'.
|
|
for i in 0..<64 {
|
|
if i % 2 == 0 {
|
|
vec[i] = true
|
|
}
|
|
}
|
|
|
|
// Print all elements
|
|
for i in 0..<64 {
|
|
print("\(vec[i])")
|
|
}
|
|
// CHECK: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|
|
// CHECK-NEXT: true
|
|
// CHECK-NEXT: false
|