@@ -83,6 +83,34 @@ def compare_to_reference_set(nums, set, seqset)
8383 end
8484 end
8585
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+
86114 %i[ clone dup ] . each do |method |
87115 test "##{ method } " do
88116 orig = SequenceSet . new "2:4,7:11,99,999"
@@ -265,6 +293,9 @@ def obj.to_sequence_set; 192_168.001_255 end
265293 SequenceSet [ ( ( 1 ..10_000 ) % 10 ) . to_a ] [ -5 , 4 ]
266294 assert_nil SequenceSet [ 111 ..222 , 888 ..999 ] [ 2000 , 4 ]
267295 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 ]
268299 end
269300
270301 test "#[range]" do
@@ -286,9 +317,13 @@ def obj.to_sequence_set; 192_168.001_255 end
286317 assert_equal SequenceSet . empty , SequenceSet [ 1 ..100 ] [ -50 ..-60 ]
287318 assert_equal SequenceSet . empty , SequenceSet [ 1 ..100 ] [ -10 ..10 ]
288319 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 ]
289322 assert_nil SequenceSet . empty [ 2 ..4 ]
290323 assert_nil SequenceSet [ 101 ..200 ] [ 1000 ..1060 ]
291324 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 ]
292327 end
293328
294329 test "#find_index" do
0 commit comments