//===--- OptionSetTest.swift - Test for library-only option sets ----------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See http://swift.org/LICENSE.txt for license information // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// // RUN: %target-run-simple-swift // REQUIRES: executable_test struct PackagingOptions : OptionSet { let rawValue: Int init(rawValue: Int) { self.rawValue = rawValue } static let Box = PackagingOptions(rawValue: 1), Carton = PackagingOptions(rawValue: 2), Bag = PackagingOptions(rawValue: 4), Satchel = PackagingOptions(rawValue: 8) // FIXME: these must be separate decls because of static let BoxOrBag: PackagingOptions = [Box, Bag] static let BoxOrCartonOrBag: PackagingOptions = [Box, Carton, Bag] static let SatchelOrBag = Satchel.union(Bag) } import StdlibUnittest var tests = TestSuite("OptionSet") tests.test("basics") { typealias P = PackagingOptions expectNotEqual(P(), .Box) expectEqual(P.Box, .Box) expectNotEqual(P.Box, .Carton) expectNotEqual(P.Box, .BoxOrBag) expectEqual(.Box, P.Box.intersection(.BoxOrBag)) expectEqual(.Bag, P.Bag.intersection(.BoxOrBag)) expectEqual(P(), P.Bag.intersection(.Box)) expectEqual(P(), P.Box.intersection(.Satchel)) expectEqual(.BoxOrBag, P.Bag.union(.Box)) expectEqual(.BoxOrBag, P.Box.union(.Bag)) expectEqual(.BoxOrCartonOrBag, P.BoxOrBag.union(.Carton)) expectEqual([.Satchel, .Box], P.SatchelOrBag.symmetricDifference(.BoxOrBag)) var p = P.Box p.formIntersection(.BoxOrBag) expectEqual(.Box, p) p = .Bag p.formIntersection(.BoxOrBag) expectEqual(.Bag, p) p = .Bag p.formIntersection(.Box) expectEqual(P(), p) p = .Box p.formIntersection(.Satchel) expectEqual(P(), p) p = .Bag p.formUnion(.Box) expectEqual(.BoxOrBag, p) p = .Box p.formUnion(.Bag) expectEqual(.BoxOrBag, p) p = .BoxOrBag p.formUnion(.Carton) expectEqual(.BoxOrCartonOrBag, p) p = .SatchelOrBag p.formSymmetricDifference(.BoxOrBag) expectEqual([.Satchel, .Box], p) } // FIXME: add tests for all of SetAlgebra, in particular // insert/remove/replace. runAllTests()