mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
158 lines
4.7 KiB
Swift
158 lines
4.7 KiB
Swift
// RUN: %target-run-stdlib-swift
|
|
// REQUIRES: executable_test
|
|
|
|
import StdlibUnittest
|
|
|
|
var BitsetTests = TestSuite("Bitset")
|
|
|
|
BitsetTests.test("_UnsafeBitset.wordCount(forCapacity:)") {
|
|
expectEqual(0, _UnsafeBitset.wordCount(forCapacity: 0))
|
|
#if _pointerBitWidth(_32)
|
|
for i in 1...32 {
|
|
expectEqual(1, _UnsafeBitset.wordCount(forCapacity: i), "i=\(i)")
|
|
}
|
|
for i in 33...64 {
|
|
expectEqual(2, _UnsafeBitset.wordCount(forCapacity: i), "i=\(i)")
|
|
}
|
|
for i in 65...96 {
|
|
expectEqual(3, _UnsafeBitset.wordCount(forCapacity: i), "i=\(i)")
|
|
}
|
|
for i in 97...128 {
|
|
expectEqual(4, _UnsafeBitset.wordCount(forCapacity: i), "i=\(i)")
|
|
}
|
|
#elseif _pointerBitWidth(_64)
|
|
for i in 1...64 {
|
|
expectEqual(1, _UnsafeBitset.wordCount(forCapacity: i), "i=\(i)")
|
|
}
|
|
for i in 65...128 {
|
|
expectEqual(2, _UnsafeBitset.wordCount(forCapacity: i), "i=\(i)")
|
|
}
|
|
for i in 193...256 {
|
|
expectEqual(4, _UnsafeBitset.wordCount(forCapacity: i), "i=\(i)")
|
|
}
|
|
#else
|
|
_UnimplementedError()
|
|
#endif
|
|
}
|
|
|
|
BitsetTests.test("_UnsafeBitset.split(_:)") {
|
|
#if _pointerBitWidth(_32)
|
|
for i in 0...31 {
|
|
let comps = _UnsafeBitset.split(i)
|
|
expectEqual(0, comps.word, "i=\(i)")
|
|
expectEqual(i, comps.bit, "i=\(i)")
|
|
}
|
|
for i in 32...63 {
|
|
let comps = _UnsafeBitset.split(i)
|
|
expectEqual(1, comps.word, "i=\(i)")
|
|
expectEqual(i - 32, comps.bit, "i=\(i)")
|
|
}
|
|
for i in 64...95 {
|
|
let comps = _UnsafeBitset.split(i)
|
|
expectEqual(2, comps.word, "i=\(i)")
|
|
expectEqual(i - 64, comps.bit, "i=\(i)")
|
|
}
|
|
for i in 96...127 {
|
|
let comps = _UnsafeBitset.split(i)
|
|
expectEqual(3, comps.word, "i=\(i)")
|
|
expectEqual(i - 96, comps.bit, "i=\(i)")
|
|
}
|
|
#elseif _pointerBitWidth(_64)
|
|
for i in 0...63 {
|
|
let comps = _UnsafeBitset.split(i)
|
|
expectEqual(0, comps.word, "i=\(i)")
|
|
expectEqual(i, comps.bit, "i=\(i)")
|
|
}
|
|
for i in 64...127 {
|
|
let comps = _UnsafeBitset.split(i)
|
|
expectEqual(1, comps.word, "i=\(i)")
|
|
expectEqual(i - 64, comps.bit, "i=\(i)")
|
|
}
|
|
for i in 128...191 {
|
|
let comps = _UnsafeBitset.split(i)
|
|
expectEqual(2, comps.word, "i=\(i)")
|
|
expectEqual(i - 128, comps.bit, "i=\(i)")
|
|
}
|
|
for i in 192...255 {
|
|
let comps = _UnsafeBitset.split(i)
|
|
expectEqual(3, comps.word, "i=\(i)")
|
|
expectEqual(i - 192, comps.bit, "i=\(i)")
|
|
}
|
|
#else
|
|
_UnimplementedError()
|
|
#endif
|
|
}
|
|
|
|
BitsetTests.test("Word.capacity") {
|
|
expectEqual(_UnsafeBitset.Word.capacity, UInt.bitWidth)
|
|
}
|
|
|
|
BitsetTests.test("Word.uncheckedContains(_:)") {
|
|
typealias Word = _UnsafeBitset.Word
|
|
for i in 0 ..< Word.capacity {
|
|
expectEqual(Word(0).uncheckedContains(i), false, "i=\(i)")
|
|
expectEqual(Word(1).uncheckedContains(i), i == 0, "i=\(i)")
|
|
expectEqual(Word(2).uncheckedContains(i), i == 1, "i=\(i)")
|
|
expectEqual(Word(4).uncheckedContains(i), i == 2, "i=\(i)")
|
|
expectEqual(Word(8).uncheckedContains(i), i == 3, "i=\(i)")
|
|
expectEqual(Word(15).uncheckedContains(i), i <= 3, "i=\(i)")
|
|
expectEqual(Word(~1).uncheckedContains(i), i != 0, "i=\(i)")
|
|
expectEqual(Word(~2).uncheckedContains(i), i != 1, "i=\(i)")
|
|
expectEqual(Word(~4).uncheckedContains(i), i != 2, "i=\(i)")
|
|
expectEqual(Word(~8).uncheckedContains(i), i != 3, "i=\(i)")
|
|
expectEqual(Word(~15).uncheckedContains(i), i > 3, "i=\(i)")
|
|
expectEqual(Word(UInt.max).uncheckedContains(i), true, "i=\(i)")
|
|
}
|
|
}
|
|
|
|
BitsetTests.test("Word.uncheckedInsert(_:)") {
|
|
typealias Word = _UnsafeBitset.Word
|
|
var word = Word(0)
|
|
for i in 0 ..< Word.capacity {
|
|
expectFalse(word.uncheckedContains(i))
|
|
expectTrue(word.uncheckedInsert(i))
|
|
expectTrue(word.uncheckedContains(i))
|
|
expectFalse(word.uncheckedInsert(i))
|
|
}
|
|
expectEqual(word.value, UInt.max)
|
|
}
|
|
|
|
BitsetTests.test("Word.uncheckedRemove(_:)") {
|
|
typealias Word = _UnsafeBitset.Word
|
|
var word = Word(UInt.max)
|
|
for i in 0 ..< Word.capacity {
|
|
expectTrue(word.uncheckedContains(i))
|
|
expectTrue(word.uncheckedRemove(i))
|
|
expectFalse(word.uncheckedContains(i))
|
|
expectFalse(word.uncheckedRemove(i))
|
|
}
|
|
expectEqual(word.value, 0)
|
|
}
|
|
|
|
BitsetTests.test("Word.count") {
|
|
typealias Word = _UnsafeBitset.Word
|
|
var word = Word(0)
|
|
for i in 0 ..< Word.capacity {
|
|
expectEqual(word.count, i)
|
|
_ = word.uncheckedInsert(i)
|
|
expectEqual(word.count, i + 1)
|
|
}
|
|
for i in 0 ..< Word.capacity {
|
|
expectEqual(word.count, Word.capacity - i)
|
|
_ = word.uncheckedRemove(i)
|
|
expectEqual(word.count, Word.capacity - i - 1)
|
|
}
|
|
}
|
|
|
|
BitsetTests.test("Word.makeIterator()") {
|
|
typealias Word = _UnsafeBitset.Word
|
|
expectEqual(Array(Word(0)), [])
|
|
expectEqual(Array(Word(1)), [0])
|
|
expectEqual(Array(Word(2)), [1])
|
|
expectEqual(Array(Word(3)), [0, 1])
|
|
expectEqual(Array(Word(42)), [1, 3, 5])
|
|
expectEqual(Array(Word(UInt.max)), Array(0..<UInt.bitWidth))
|
|
}
|
|
|
|
runAllTests()
|