@@ -83,6 +83,34 @@ def compare_to_reference_set(nums, set, seqset)
83
83
end
84
84
end
85
85
86
+ data "#slice(length)" , { transform : -> { _1 . slice ( 0 , 10 ) } , }
87
+ data "#slice(range)" , { transform : -> { _1 . slice ( 0 ...10 ) } , }
88
+ data "#slice => empty" , { transform : -> { _1 . slice ( 0 ...0 ) } , }
89
+ data "#slice => empty" , { transform : -> { _1 . slice ( 10 ..9 ) } , }
90
+ data "#union" , { transform : -> { _1 | ( 1 ..100 ) } , }
91
+ data "#intersection" , { transform : -> { _1 & ( 1 ..100 ) } , }
92
+ data "#difference" , { transform : -> { _1 - ( 1 ..100 ) } , }
93
+ data "#xor" , { transform : -> { _1 ^ ( 1 ..100 ) } , }
94
+ data "#complement" , { transform : -> { ~_1 } , }
95
+ data "#normalize" , { transform : -> { _1 . normalize } , }
96
+ data "#limit" , { transform : -> { _1 . limit ( max : 22 ) } , freeze : :always }
97
+ data "#limit => empty" , { transform : -> { _1 . limit ( max : 1 ) } , freeze : :always }
98
+ test "transforms keep frozen status" do |data |
99
+ transform = data . fetch ( :transform )
100
+ set = SequenceSet . new ( "2:4,7:11,99,999" )
101
+ dup = set . dup
102
+ result = transform . to_proc . ( set )
103
+ assert_equal dup , set , "transform should not modified"
104
+ if data [ :freeze ] == :always
105
+ assert result . frozen? , "this transform always returns frozen"
106
+ else
107
+ refute result . frozen? , "transform of non-frozen returned frozen"
108
+ end
109
+ set . freeze
110
+ result = transform . to_proc . ( set )
111
+ assert result . frozen? , "transform of frozen returned non-frozen"
112
+ end
113
+
86
114
%i[ clone dup ] . each do |method |
87
115
test "##{ method } " do
88
116
orig = SequenceSet . new "2:4,7:11,99,999"
@@ -265,6 +293,9 @@ def obj.to_sequence_set; 192_168.001_255 end
265
293
SequenceSet [ ( ( 1 ..10_000 ) % 10 ) . to_a ] [ -5 , 4 ]
266
294
assert_nil SequenceSet [ 111 ..222 , 888 ..999 ] [ 2000 , 4 ]
267
295
assert_nil SequenceSet [ 111 ..222 , 888 ..999 ] [ -2000 , 4 ]
296
+ # with length longer than the remaining members
297
+ assert_equal SequenceSet [ 101 ...200 ] ,
298
+ SequenceSet [ 1 ...200 ] [ 100 , 10000 ]
268
299
end
269
300
270
301
test "#[range]" do
@@ -286,9 +317,13 @@ def obj.to_sequence_set; 192_168.001_255 end
286
317
assert_equal SequenceSet . empty , SequenceSet [ 1 ..100 ] [ -50 ..-60 ]
287
318
assert_equal SequenceSet . empty , SequenceSet [ 1 ..100 ] [ -10 ..10 ]
288
319
assert_equal SequenceSet . empty , SequenceSet [ 1 ..100 ] [ 60 ..-60 ]
320
+ assert_equal SequenceSet . empty , SequenceSet [ 1 ..100 ] [ 10 ...0 ]
321
+ assert_equal SequenceSet . empty , SequenceSet [ 1 ..100 ] [ 0 ...0 ]
289
322
assert_nil SequenceSet . empty [ 2 ..4 ]
290
323
assert_nil SequenceSet [ 101 ..200 ] [ 1000 ..1060 ]
291
324
assert_nil SequenceSet [ 101 ..200 ] [ -1000 ..-60 ]
325
+ # with length longer than the remaining members
326
+ assert_equal SequenceSet [ 101 ..1111 ] , SequenceSet [ 1 ..1111 ] [ 100 ..999_999 ]
292
327
end
293
328
294
329
test "#find_index" do
0 commit comments