File: OptionSetTest.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (122 lines) | stat: -rw-r--r-- 3,218 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//===--- 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

import StdlibUnittest

struct PackagingOptions : OptionSet {
  let rawValue: Int
  init(rawValue: Int) { self.rawValue = rawValue }

  static let box = PackagingOptions(rawValue: 1)
  static let carton = PackagingOptions(rawValue: 2)
  static let bag = PackagingOptions(rawValue: 4)
  static let satchel = PackagingOptions(rawValue: 8)

  static let boxOrBag: PackagingOptions = [box, bag]
  static let boxOrCartonOrBag: PackagingOptions = [box, carton, bag]
  static let satchelOrBag = satchel.union(bag)
}

var tests = TestSuite("OptionSet")
defer { runAllTests() }

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)
}

tests.test("set algebra") {
  typealias P = PackagingOptions

  // remove
  var p = P.boxOrBag
  expectNil(p.remove(P.carton))

  p = P.boxOrBag
  p.remove(P.boxOrCartonOrBag)
  expectEqual(P(), p)

  p = P.boxOrBag
  let removed = p.remove(P.satchelOrBag)
  if #available(SwiftStdlib 5.3, *) {
    // https://github.com/apple/swift/pull/28378
    expectEqual(P.bag, removed)
  }
  expectEqual(P.box, p)

  // insert
  p = P.box
  var insertionResult = p.insert(.bag)
  expectTrue(insertionResult.inserted)
  expectEqual(P.bag, insertionResult.memberAfterInsert)
  expectEqual(P.boxOrBag, p)

  insertionResult = p.insert(.bag)
  expectFalse(insertionResult.inserted)
  expectEqual(P.bag, insertionResult.memberAfterInsert)

  // update
  p = P.box
  expectNil(p.update(with: .bag))
  expectEqual(P.boxOrBag, p)

  p = P.box
  expectEqual(P.box, p.update(with: .boxOrBag))
  expectEqual(P.boxOrBag, p)
}