From f88ecdef6b472b482cd1f961402e42e858cfaf82 Mon Sep 17 00:00:00 2001 From: Kouhei Yanagita Date: Fri, 29 Nov 2024 11:10:07 +0900 Subject: [PATCH] Fix ^ to respect subclasses --- lib/set.rb | 2 +- test/test_set.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/set.rb b/lib/set.rb index a9946c0..0dd642f 100644 --- a/lib/set.rb +++ b/lib/set.rb @@ -659,7 +659,7 @@ def &(enum) # Set[1, 2] ^ Set[2, 3] #=> # # Set[1, 'b', 'c'] ^ ['b', 'd'] #=> # def ^(enum) - n = Set.new(enum) + n = self.class.new(enum) each { |o| n.add(o) unless n.delete?(o) } n end diff --git a/test/test_set.rb b/test/test_set.rb index 49dc58e..5659460 100644 --- a/test/test_set.rb +++ b/test/test_set.rb @@ -643,6 +643,11 @@ def test_xor ret = set ^ [2,4,5,5] assert_not_same(set, ret) assert_equal(Set[1,3,5], ret) + + set2 = Set2[1,2,3,4] + ret2 = set2 ^ [2,4,5,5] + assert_instance_of(Set2, ret2) + assert_equal(Set2[1,3,5], ret2) end def test_eq