blob: 306e67295b4eaedac02770c7df2d0f12dd64b2de [file] [log] [blame]
//===--- OptionSetTest.swift - Test for library-only option sets ----------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://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 <rdar://20962990>
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()