8
8
See http://swift.org/CONTRIBUTORS.txt for Swift project authors
9
9
*/
10
10
11
-
12
11
import func Basics. nextItem
12
+ @testable import func Basics. containsNonContiguousSubset
13
+ @testable import func Basics. containsContiguousSubset
13
14
import Testing
14
15
@Suite
15
16
struct ArrayHelpersTests {
@@ -29,4 +30,113 @@ struct ArrayHelpersTests {
29
30
#expect( nextItem ( in: [ 1 ] , after: 1 ) == nil )
30
31
#expect( nextItem ( in: [ 0 , 1 , 12 , 1 , 4 ] , after: 1 ) == 12 )
31
32
}
33
+
34
+ @Test (
35
+ . tags(
36
+ Tag . TestSize. small,
37
+ ) ,
38
+ )
39
+ func containsNonContiguousSubsetReturnsExpectedValue( ) async throws {
40
+ // Empty subset should always return true
41
+ #expect( containsNonContiguousSubset ( array: [ ] as [ String ] , subset: [ ] ) == true )
42
+ #expect( containsNonContiguousSubset ( array: [ ] as [ Int ] , subset: [ ] ) == true )
43
+ #expect( containsNonContiguousSubset ( array: [ ] as [ Bool ] , subset: [ ] ) == true )
44
+ #expect( containsNonContiguousSubset ( array: [ 1 , 2 , 3 ] , subset: [ ] ) == true )
45
+
46
+ // Empty array with non-empty subset should return false
47
+ #expect( containsNonContiguousSubset ( array: [ ] as [ Int ] , subset: [ 1 ] ) == false )
48
+
49
+ // Single element tests
50
+ #expect( containsNonContiguousSubset ( array: [ 1 ] , subset: [ 1 ] ) == true )
51
+ #expect( containsNonContiguousSubset ( array: [ 1 ] , subset: [ 2 ] ) == false )
52
+
53
+ // Basic subset tests - all elements present
54
+ #expect( containsNonContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 1 , 3 , 5 ] ) == true )
55
+ #expect( containsNonContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 5 , 1 , 3 ] ) == true ) // Order doesn't matter
56
+ #expect( containsNonContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 2 , 4 ] ) == true )
57
+
58
+ // Missing elements tests
59
+ #expect( containsNonContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 1 , 6 ] ) == false )
60
+ #expect( containsNonContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 6 , 7 , 8 ] ) == false )
61
+
62
+ // Duplicate elements in subset
63
+ #expect( containsNonContiguousSubset ( array: [ 1 , 2 , 2 , 3 , 4 ] , subset: [ 2 , 2 ] ) == true )
64
+ #expect( containsNonContiguousSubset ( array: [ 1 , 2 , 3 , 4 ] , subset: [ 2 , 2 ] ) == true ) // Only one 2 in array, but still contains 2
65
+
66
+ // String tests
67
+ #expect( containsNonContiguousSubset ( array: [ " a " , " b " , " c " , " d " ] , subset: [ " a " , " c " ] ) == true )
68
+ #expect( containsNonContiguousSubset ( array: [ " a " , " b " , " c " , " d " ] , subset: [ " d " , " a " ] ) == true )
69
+ #expect( containsNonContiguousSubset ( array: [ " a " , " b " , " c " , " d " ] , subset: [ " e " ] ) == false )
70
+
71
+ // Subset same size as array
72
+ #expect( containsNonContiguousSubset ( array: [ 1 , 2 , 3 ] , subset: [ 3 , 2 , 1 ] ) == true )
73
+ #expect( containsNonContiguousSubset ( array: [ 1 , 2 , 3 ] , subset: [ 1 , 2 , 4 ] ) == false )
74
+
75
+ // Subset larger than array
76
+ #expect( containsNonContiguousSubset ( array: [ 1 , 2 ] , subset: [ 1 , 2 , 3 ] ) == false )
77
+ }
78
+
79
+ @Test (
80
+ . tags(
81
+ Tag . TestSize. small,
82
+ ) ,
83
+ )
84
+ func containsContiguousSubsetReturnsExpectedValue( ) async throws {
85
+ // Empty subset should always return true
86
+ #expect( containsContiguousSubset ( array: [ ] as [ String ] , subset: [ ] ) == true )
87
+ #expect( containsContiguousSubset ( array: [ ] as [ Int ] , subset: [ ] ) == true )
88
+ #expect( containsContiguousSubset ( array: [ ] as [ Bool ] , subset: [ ] ) == true )
89
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 ] , subset: [ ] ) == true )
90
+
91
+ // Empty array with non-empty subset should return false
92
+ #expect( containsContiguousSubset ( array: [ ] as [ Int ] , subset: [ 1 ] ) == false )
93
+
94
+ // Single element tests
95
+ #expect( containsContiguousSubset ( array: [ 1 ] , subset: [ 1 ] ) == true )
96
+ #expect( containsContiguousSubset ( array: [ 1 ] , subset: [ 2 ] ) == false )
97
+
98
+ // Basic contiguous subset tests
99
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 2 , 3 , 4 ] ) == true )
100
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 1 , 2 ] ) == true )
101
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 4 , 5 ] ) == true )
102
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 1 , 2 , 3 , 4 , 5 ] ) == true ) // Entire array
103
+
104
+ // Non-contiguous elements should return false
105
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 1 , 3 , 5 ] ) == false )
106
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 2 , 4 ] ) == false )
107
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 1 , 3 ] ) == false )
108
+
109
+ // Wrong order should return false
110
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 3 , 2 , 1 ] ) == false )
111
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 5 , 4 , 3 ] ) == false )
112
+
113
+ // Missing elements
114
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 1 , 6 ] ) == false )
115
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 , 5 ] , subset: [ 6 , 7 ] ) == false )
116
+
117
+ // Duplicate elements
118
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 2 , 3 , 4 ] , subset: [ 2 , 2 , 3 ] ) == true )
119
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 2 , 4 ] , subset: [ 2 , 2 ] ) == false ) // 2s are not contiguous
120
+ #expect( containsContiguousSubset ( array: [ 1 , 1 , 2 , 3 ] , subset: [ 1 , 1 ] ) == true )
121
+
122
+ // String tests
123
+ #expect( containsContiguousSubset ( array: [ " a " ] , subset: [ " b " , " c " ] ) == false )
124
+ #expect( containsContiguousSubset ( array: [ " a " ] , subset: [ ] ) == true )
125
+ #expect( containsContiguousSubset ( array: [ " a " , " b " , " c " , " d " ] , subset: [ " b " , " c " ] ) == true )
126
+ #expect( containsContiguousSubset ( array: [ " a " , " b " , " c " , " d " ] , subset: [ " a " , " c " ] ) == false ) // Not contiguous
127
+ #expect( containsContiguousSubset ( array: [ " hello " , " world " , " test " ] , subset: [ " world " , " test " ] ) == true )
128
+
129
+ // Subset larger than array
130
+ #expect( containsContiguousSubset ( array: [ 1 , 2 ] , subset: [ 1 , 2 , 3 ] ) == false )
131
+
132
+ // Multiple occurrences - should find first match
133
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 1 , 2 , 3 ] , subset: [ 1 , 2 ] ) == true )
134
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 1 , 2 , 3 ] , subset: [ 2 , 3 ] ) == true )
135
+
136
+ // Edge case: subset at the end
137
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 ] , subset: [ 3 , 4 ] ) == true )
138
+
139
+ // Edge case: subset at the beginning
140
+ #expect( containsContiguousSubset ( array: [ 1 , 2 , 3 , 4 ] , subset: [ 1 , 2 ] ) == true )
141
+ }
32
142
}
0 commit comments