|
1 | 1 | /*
|
2 |
| -* Copyright (C) 2015 - 2016, Daniel Dahan and CosmicMind, Inc. <http://cosmicmind.io>. |
| 2 | +* Copyright (C) 2015 - 2016, Daniel Dahan and CosmicMind, Inc. <http://cosmicmind.io>. |
3 | 3 | * All rights reserved.
|
4 | 4 | *
|
5 | 5 | * Redistribution and use in source and binary forms, with or without
|
@@ -33,147 +33,161 @@ import XCTest
|
33 | 33 |
|
34 | 34 | class ProbabilityTests: XCTestCase {
|
35 | 35 | var saveExpectation: XCTestExpectation?
|
36 |
| - |
| 36 | + |
37 | 37 | override func setUp() {
|
38 | 38 | super.setUp()
|
39 | 39 | }
|
40 |
| - |
| 40 | + |
41 | 41 | override func tearDown() {
|
42 | 42 | super.tearDown()
|
43 | 43 | }
|
44 |
| - |
| 44 | + |
45 | 45 | func testSortedSet() {
|
46 | 46 | let s: SortedSet<Int> = SortedSet<Int>()
|
47 | 47 | XCTAssertEqual(0, s.probabilityOf({ _ -> Bool in return true}))
|
48 |
| - |
| 48 | + |
49 | 49 | s.insert(1, 2, 3, 3)
|
50 |
| - |
| 50 | + |
51 | 51 | let ev1: Double = 16 * s.probabilityOf(2, 3)
|
52 |
| - |
| 52 | + |
53 | 53 | XCTAssertEqual(ev1, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
54 |
| - |
| 54 | + |
55 | 55 | let ev2: Double = 16 * s.probabilityOf { (element: Int) -> Bool in
|
56 | 56 | return 2 == element || 3 == element
|
57 | 57 | }
|
58 |
| - |
| 58 | + |
59 | 59 | XCTAssertEqual(ev2, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
60 |
| - |
| 60 | + |
61 | 61 | s.removeAll()
|
62 | 62 | XCTAssert(0 == s.count, "Test failed.")
|
63 | 63 | }
|
64 |
| - |
| 64 | + |
65 | 65 | func testSortedMultiSet() {
|
66 | 66 | let s: SortedSet<Int> = SortedSet<Int>()
|
67 | 67 | XCTAssertEqual(0, s.probabilityOf({ _ -> Bool in return true}))
|
68 |
| - |
| 68 | + |
69 | 69 | s.insert(1, 2, 3, 3)
|
70 |
| - |
| 70 | + |
71 | 71 | let ev1: Double = 16 * s.probabilityOf(2, 3)
|
72 |
| - |
| 72 | + |
73 | 73 | XCTAssertEqual(ev1, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
74 |
| - |
| 74 | + |
75 | 75 | let ev2: Double = 16 * s.probabilityOf { (element: Int) -> Bool in
|
76 | 76 | return 2 == element || 3 == element
|
77 | 77 | }
|
78 |
| - |
| 78 | + |
79 | 79 | XCTAssertEqual(ev2, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
80 |
| - |
| 80 | + |
81 | 81 | s.removeAll()
|
82 | 82 | XCTAssert(0 == s.count, "Test failed.")
|
83 | 83 | }
|
84 |
| - |
| 84 | + |
85 | 85 | func testSortedDictionary() {
|
86 | 86 | let s: SortedDictionary<Int, Int> = SortedDictionary<Int, Int>()
|
87 | 87 | XCTAssertEqual(0, s.probabilityOf({ _ -> Bool in return true}))
|
88 |
| - |
| 88 | + |
89 | 89 | s.insert((1, 1))
|
90 | 90 | s.insert((2, 2))
|
91 | 91 | s.insert((3, 3))
|
92 | 92 | s.insert((3, 3))
|
93 |
| - |
| 93 | + |
94 | 94 | let ev1: Double = 16 * s.probabilityOf(2, 3)
|
95 |
| - |
| 95 | + |
96 | 96 | XCTAssertEqual(ev1, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
97 |
| - |
| 97 | + |
98 | 98 | let ev2: Double = 16 * s.probabilityOf { (key: Int, value: Int?) -> Bool in
|
99 | 99 | return 2 == value || 3 == value
|
100 | 100 | }
|
101 |
| - |
| 101 | + |
102 | 102 | XCTAssertEqual(ev2, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
103 |
| - |
| 103 | + |
104 | 104 | s.removeAll()
|
105 | 105 | XCTAssert(0 == s.count, "Test failed.")
|
106 | 106 | }
|
107 |
| - |
| 107 | + |
108 | 108 | func testSortedMultiDictionary() {
|
109 | 109 | let s: SortedMultiDictionary<Int, Int> = SortedMultiDictionary<Int, Int>()
|
110 | 110 | XCTAssertEqual(0, s.probabilityOf({ _ -> Bool in return true}))
|
111 |
| - |
| 111 | + |
112 | 112 | s.insert((1, 1))
|
113 | 113 | s.insert((2, 2))
|
114 | 114 | s.insert((3, 3))
|
115 | 115 | s.insert((3, 3))
|
116 |
| - |
| 116 | + |
117 | 117 | let ev1: Double = 16 * s.probabilityOf(2, 3)
|
118 |
| - |
| 118 | + |
119 | 119 | XCTAssertEqual(ev1, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
120 |
| - |
| 120 | + |
121 | 121 | let ev2: Double = 16 * s.probabilityOf { (key: Int, value: Int?) -> Bool in
|
122 | 122 | return 2 == value || 3 == value
|
123 | 123 | }
|
124 |
| - |
| 124 | + |
125 | 125 | XCTAssertEqual(ev2, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
126 |
| - |
| 126 | + |
127 | 127 | s.removeAll()
|
128 | 128 | XCTAssert(0 == s.count, "Test failed.")
|
129 | 129 | }
|
130 |
| - |
| 130 | + |
131 | 131 | func testArray() {
|
132 | 132 | var s: Array<Int> = Array<Int>()
|
133 | 133 | XCTAssertEqual(0, s.probabilityOf({ _ -> Bool in return true}))
|
134 |
| - |
| 134 | + |
135 | 135 | s.append(1)
|
136 | 136 | s.append(2)
|
137 | 137 | s.append(3)
|
138 | 138 | s.append(4)
|
139 |
| - |
| 139 | + |
140 | 140 | let ev1: Double = 16 * s.probabilityOf(2, 3)
|
141 |
| - |
| 141 | + |
142 | 142 | XCTAssertEqual(ev1, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
143 |
| - |
| 143 | + |
144 | 144 | let ev2: Double = 16 * s.probabilityOf { (element: Int) -> Bool in
|
145 | 145 | return 2 == element || 3 == element
|
146 | 146 | }
|
147 |
| - |
| 147 | + |
148 | 148 | XCTAssertEqual(ev2, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
149 |
| - |
| 149 | + |
150 | 150 | s.removeAll()
|
151 | 151 | XCTAssert(0 == s.count, "Test failed.")
|
152 | 152 | }
|
153 |
| - |
| 153 | + |
154 | 154 | func testSet() {
|
155 | 155 | var s: Set<Int> = Set<Int>()
|
156 | 156 | XCTAssertEqual(0, s.probabilityOf({ _ -> Bool in return true}))
|
157 |
| - |
| 157 | + |
158 | 158 | s.insert(1)
|
159 | 159 | s.insert(2)
|
160 | 160 | s.insert(3)
|
161 | 161 | s.insert(4)
|
162 |
| - |
| 162 | + |
163 | 163 | let ev1: Double = 16 * s.probabilityOf(2, 3)
|
164 |
| - |
| 164 | + |
165 | 165 | XCTAssertEqual(ev1, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
166 |
| - |
| 166 | + |
167 | 167 | let ev2: Double = 16 * s.probabilityOf { (element: Int) -> Bool in
|
168 | 168 | return 2 == element || 3 == element
|
169 | 169 | }
|
170 |
| - |
| 170 | + |
171 | 171 | XCTAssertEqual(ev2, s.expectedValueOf(16, elements: 2, 3), "Test failed.")
|
172 |
| - |
| 172 | + |
173 | 173 | s.removeAll()
|
174 | 174 | XCTAssertEqual(0, s.count)
|
175 | 175 | }
|
176 | 176 |
|
| 177 | + func testBlock() { |
| 178 | + let die: Array<Int> = Array<Int>(arrayLiteral: 1, 2, 3, 4, 5, 6) |
| 179 | + |
| 180 | + let probabilityOfX: Double = die.probabilityOf { (number: Int) in |
| 181 | + if 5 < number || 0 == number % 3 { |
| 182 | + // Do more. |
| 183 | + return true |
| 184 | + } |
| 185 | + return false |
| 186 | + } |
| 187 | + |
| 188 | + XCTAssertTrue(0.33 < probabilityOfX, "Test failed.") |
| 189 | + } |
| 190 | + |
177 | 191 | func testPerformance() {
|
178 | 192 | self.measureBlock() {}
|
179 | 193 | }
|
|
0 commit comments