Skip to content

Commit 8b09881

Browse files
authored
πŸ”€ Merge pull request #466 from ruby/backport/0.4-seqset-tests
βœ… Backport `SequenceSet` tests to 0.4
2 parents e0f997c + 45e39d1 commit 8b09881

File tree

1 file changed

+86
-2
lines changed

1 file changed

+86
-2
lines changed

β€Žtest/net/imap/test_sequence_set.rb

Lines changed: 86 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def compare_to_reference_set(nums, set, seqset)
2323
assert seqset.cover? sorted.sample 100
2424
end
2525

26-
test "compared to reference Set, add many random values" do
26+
test "fuzz test: add numbers and compare to reference Set" do
2727
set = Set.new
2828
seqset = SequenceSet.new
2929
10.times do
@@ -32,7 +32,7 @@ def compare_to_reference_set(nums, set, seqset)
3232
end
3333
end
3434

35-
test "compared to reference Set, add many large ranges" do
35+
test "fuzz test: add ranges and compare to reference Set" do
3636
set = Set.new
3737
seqset = SequenceSet.new
3838
(1..10_000).each_slice(250) do
@@ -41,6 +41,80 @@ def compare_to_reference_set(nums, set, seqset)
4141
end
4242
end
4343

44+
test "fuzz test: set union identities" do
45+
10.times do
46+
lhs = SequenceSet[Array.new(100) { rand(1..300) }]
47+
rhs = SequenceSet[Array.new(100) { rand(1..300) }]
48+
union = lhs | rhs
49+
assert_equal union, rhs | lhs # commutative
50+
assert_equal union, ~(~lhs & ~rhs) # De Morgan's Law
51+
assert_equal union, lhs | (lhs ^ rhs)
52+
assert_equal union, lhs | (rhs - lhs)
53+
assert_equal union, (lhs & rhs) ^ (lhs ^ rhs)
54+
mutable = lhs.dup
55+
assert_equal union, mutable.merge(rhs)
56+
assert_equal union, mutable
57+
end
58+
end
59+
60+
test "fuzz test: set intersection identities" do
61+
10.times do
62+
lhs = SequenceSet[Array.new(100) { rand(1..300) }]
63+
rhs = SequenceSet[Array.new(100) { rand(1..300) }]
64+
intersection = lhs & rhs
65+
assert_equal intersection, rhs & lhs # commutative
66+
assert_equal intersection, ~(~lhs | ~rhs) # De Morgan's Law
67+
assert_equal intersection, lhs - ~rhs
68+
assert_equal intersection, lhs - (lhs - rhs)
69+
assert_equal intersection, lhs - (lhs ^ rhs)
70+
assert_equal intersection, lhs ^ (lhs - rhs)
71+
end
72+
end
73+
74+
test "fuzz test: set subtraction identities" do
75+
10.times do
76+
lhs = SequenceSet[Array.new(100) { rand(1..300) }]
77+
rhs = SequenceSet[Array.new(100) { rand(1..300) }]
78+
difference = lhs - rhs
79+
assert_equal difference, ~rhs - ~lhs
80+
assert_equal difference, ~(~lhs | rhs)
81+
assert_equal difference, lhs & (lhs ^ rhs)
82+
assert_equal difference, lhs ^ (lhs & rhs)
83+
assert_equal difference, rhs ^ (lhs | rhs)
84+
mutable = lhs.dup
85+
assert_equal difference, mutable.subtract(rhs)
86+
assert_equal difference, mutable
87+
end
88+
end
89+
90+
test "fuzz test: set xor identities" do
91+
10.times do
92+
lhs = SequenceSet[Array.new(100) { rand(1..300) }]
93+
rhs = SequenceSet[Array.new(100) { rand(1..300) }]
94+
mid = SequenceSet[Array.new(100) { rand(1..300) }]
95+
xor = lhs ^ rhs
96+
assert_equal xor, rhs ^ lhs # commutative
97+
assert_equal xor, (lhs | rhs) - (lhs & rhs)
98+
assert_equal xor, (lhs ^ mid) ^ (mid ^ rhs)
99+
assert_equal xor, ~lhs ^ ~rhs
100+
end
101+
end
102+
103+
test "fuzz test: set complement identities" do
104+
10.times do
105+
set = SequenceSet[Array.new(100) { rand(1..300) }]
106+
complement = ~set
107+
assert_equal set, ~complement
108+
assert_equal complement, ~set.dup
109+
assert_equal complement, SequenceSet.full - set
110+
mutable = set.dup
111+
assert_equal complement, mutable.complement!
112+
assert_equal complement, mutable
113+
assert_equal set, mutable.complement!
114+
assert_equal set, mutable
115+
end
116+
end
117+
44118
test "#== equality by value (not by identity or representation)" do
45119
assert_equal SequenceSet.new, SequenceSet.new
46120
assert_equal SequenceSet.new("1"), SequenceSet[1]
@@ -573,6 +647,16 @@ def obj.to_sequence_set; 192_168.001_255 end
573647
assert_equal seqset["1,5,11:99"], seqset["1,5:6,8:9,11:99"].subtract("6:9")
574648
end
575649

650+
test "#xor" do
651+
seqset = -> { SequenceSet.new(_1) }
652+
assert_equal seqset["1:5,11:15"], seqset["1:10"] ^ seqset["6:15"]
653+
assert_equal seqset["1,3,5:6"], seqset[1..5] ^ [2, 4, 6]
654+
assert_equal SequenceSet.empty, seqset[1..5] ^ seqset[1..5]
655+
assert_equal seqset["1:100"], seqset["1:50"] ^ seqset["51:100"]
656+
assert_equal seqset["1:50"], seqset["1:50"] ^ SequenceSet.empty
657+
assert_equal seqset["1:50"], SequenceSet.empty ^ seqset["1:50"]
658+
end
659+
576660
test "#min" do
577661
assert_equal 3, SequenceSet.new("34:3").min
578662
assert_equal 345, SequenceSet.new("345,678").min

0 commit comments

Comments
Β (0)