Issue #1721812: Binary operations and copy operations on set/frozenset
subclasses need to return the base type, not the subclass itself.
diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py
index 614c9c0..07319fc 100644
--- a/Lib/test/test_set.py
+++ b/Lib/test/test_set.py
@@ -71,7 +71,7 @@
         for c in self.letters:
             self.assertEqual(c in u, c in self.d or c in self.otherword)
         self.assertEqual(self.s, self.thetype(self.word))
-        self.assertEqual(type(u), self.thetype)
+        self.assertEqual(type(u), self.basetype)
         self.assertRaises(PassThru, self.s.union, check_pass_thru())
         self.assertRaises(TypeError, self.s.union, [[]])
         for C in set, frozenset, dict.fromkeys, str, list, tuple:
@@ -97,7 +97,7 @@
         for c in self.letters:
             self.assertEqual(c in i, c in self.d and c in self.otherword)
         self.assertEqual(self.s, self.thetype(self.word))
-        self.assertEqual(type(i), self.thetype)
+        self.assertEqual(type(i), self.basetype)
         self.assertRaises(PassThru, self.s.intersection, check_pass_thru())
         for C in set, frozenset, dict.fromkeys, str, list, tuple:
             self.assertEqual(self.thetype('abcba').intersection(C('cdc')), set('cc'))
@@ -142,7 +142,7 @@
         for c in self.letters:
             self.assertEqual(c in i, c in self.d and c not in self.otherword)
         self.assertEqual(self.s, self.thetype(self.word))
-        self.assertEqual(type(i), self.thetype)
+        self.assertEqual(type(i), self.basetype)
         self.assertRaises(PassThru, self.s.difference, check_pass_thru())
         self.assertRaises(TypeError, self.s.difference, [[]])
         for C in set, frozenset, dict.fromkeys, str, list, tuple:
@@ -169,7 +169,7 @@
         for c in self.letters:
             self.assertEqual(c in i, (c in self.d) ^ (c in self.otherword))
         self.assertEqual(self.s, self.thetype(self.word))
-        self.assertEqual(type(i), self.thetype)
+        self.assertEqual(type(i), self.basetype)
         self.assertRaises(PassThru, self.s.symmetric_difference, check_pass_thru())
         self.assertRaises(TypeError, self.s.symmetric_difference, [[]])
         for C in set, frozenset, dict.fromkeys, str, list, tuple:
@@ -325,6 +325,7 @@
 
 class TestSet(TestJointOps):
     thetype = set
+    basetype = set
 
     def test_init(self):
         s = self.thetype()
@@ -357,6 +358,7 @@
         dup = self.s.copy()
         self.assertEqual(self.s, dup)
         self.assertNotEqual(id(self.s), id(dup))
+        self.assertEqual(type(dup), self.basetype)
 
     def test_add(self):
         self.s.add('Q')
@@ -595,6 +597,7 @@
 
 class TestSetSubclass(TestSet):
     thetype = SetSubclass
+    basetype = set
 
 class SetSubclassWithKeywordArgs(set):
     def __init__(self, iterable=[], newarg=None):
@@ -608,6 +611,7 @@
 
 class TestFrozenSet(TestJointOps):
     thetype = frozenset
+    basetype = frozenset
 
     def test_init(self):
         s = self.thetype(self.word)
@@ -673,6 +677,7 @@
 
 class TestFrozenSetSubclass(TestFrozenSet):
     thetype = FrozenSetSubclass
+    basetype = frozenset
 
     def test_constructor_identity(self):
         s = self.thetype(range(3))