Example #1
0
    def test_get(self):
        VALUES = [
            "test1",
            "test2",
            "",
        ]
        ps = PowerSet()

        ps.put(VALUES[0])
        ps.put(VALUES[1])
        ps.put(VALUES[2])

        # существующие элементы
        self.assertTrue(ps.get(VALUES[0]))
        self.assertTrue(ps.get(VALUES[1]))
        self.assertTrue(ps.get(VALUES[2]))

        index = ps.find(VALUES[0])
        self.assertIn(VALUES[0], ps._slots[index])

        index = ps.find(VALUES[1])
        self.assertIn(VALUES[1], ps._slots[index])

        index = ps.find(VALUES[2])
        self.assertIn(VALUES[2], ps._slots[index])

        # отсутствующий элемент
        self.assertFalse(ps.get("test3"))

        index = ps.find("test3")
        self.assertIsNone(index)
Example #2
0
    def test_remove(self):
        VALUES = [
            "test1",
            "test2",
            "",
        ]
        ps = PowerSet()

        ps.put(VALUES[0])
        ps.put(VALUES[1])
        ps.put(VALUES[2])
        self.assertEqual(ps.size(), 3)

        self.assertTrue(ps.get(VALUES[0]))
        self.assertTrue(ps.get(VALUES[1]))
        self.assertTrue(ps.get(VALUES[2]))

        # удаление отсутствующего элемента
        ps.remove("test3")
        self.assertEqual(ps.size(), 3)

        # удаление существующего элемента
        ps.remove(VALUES[0])
        self.assertEqual(ps.size(), 2)
        self.assertFalse(ps.get(VALUES[0]))

        # удаление отсутствующего элемента
        ps.remove(VALUES[0])
        self.assertEqual(ps.size(), 2)

        # удаление элемента с пустой строкой
        ps.remove(VALUES[2])
        self.assertEqual(ps.size(), 1)
        self.assertFalse(ps.get(VALUES[2]))
Example #3
0
    def test_timing(self):
        from timeit import default_timer as timer
        from datetime import timedelta
        from random import randrange

        # операции над множествами из десятков тысяч элементов
        # должны укладываться в пару секунд
        REFERENCE = 2

        ps1 = PowerSet()
        ps2 = PowerSet()

        values = [self.get_random_string(100) for n in range(100)]

        print("Loop 19900: ", timedelta(seconds=timer()))
        start = timer()
        for n in range(0, 19800):
            ps1.put(self.get_random_string(randrange(10, 150)))
        for val in values:
            ps1.put(val)
        end = timer()
        print("created 19900: " + str(timedelta(seconds=end - start)))

        print("Loop 21100: ", timedelta(seconds=timer()))
        start = timer()
        for n in range(0, 21000):
            ps2.put(self.get_random_string(randrange(10, 150)))

        for val in values:
            ps2.put(val)
        end = timer()
        print("created 21100: " + str(timedelta(seconds=end - start)))

        self.assertEqual(ps1.size(), 19900)
        self.assertEqual(ps2.size(), 21100)

        # put
        start = timer()
        ps1.put(self.get_random_string(randrange(10, 150)))
        end = timer()
        print("put: " + str(timedelta(seconds=end - start)))
        self.assertTrue(end - start <= REFERENCE)

        # get
        val = self.get_random_string(randrange(10, 150))
        ps1.put(val)

        start = timer()
        ps1.get(val)
        end = timer()
        print("get: " + str(timedelta(seconds=end - start)))
        self.assertTrue(end - start <= REFERENCE)

        # remove
        val = self.get_random_string(randrange(10, 150))
        ps1.put(val)

        start = timer()
        ps1.remove(val)
        end = timer()
        print("remove: " + str(timedelta(seconds=end - start)))
        self.assertTrue(end - start <= REFERENCE)

        # intersection
        print("\nIntersection start: ", timedelta(seconds=timer()))
        start = timer()
        ps1.intersection(ps2)
        end = timer()
        print(timedelta(seconds=end - start))
        self.assertTrue(end - start <= REFERENCE)

        # union
        print("\nUnion start: ", timedelta(seconds=timer()))
        start = timer()
        ps1.union(ps2)
        end = timer()
        print(timedelta(seconds=end - start))
        self.assertTrue(end - start <= REFERENCE)

        # difference
        print("\nDifference start: ", timedelta(seconds=timer()))
        start = timer()
        ps1.difference(ps2)
        end = timer()
        print(timedelta(seconds=end - start))
        self.assertTrue(end - start <= REFERENCE)

        # issubset
        print("\nIssubset start: ", timedelta(seconds=timer()))
        start = timer()
        ps1.issubset(ps1)
        end = timer()
        print(timedelta(seconds=end - start))
        self.assertTrue(end - start <= REFERENCE)
Example #4
0
    def test_size(self):
        VALUES = [
            "test1",
            "test2",
            "",
        ]

        ps = PowerSet()
        self.assertEqual(ps.size(), 0)

        ps.put(VALUES[0])
        self.assertEqual(ps.size(), 1)

        ps.put(VALUES[1])
        self.assertEqual(ps.size(), 2)

        ps.put(VALUES[2])
        self.assertEqual(ps.size(), 3)

        for n in range(3, 12):
            ps.put("test" + str(n))

        self.assertEqual(ps.size(), 12)
Example #5
0
    def test_issubset(self):
        ps1 = PowerSet()
        ps2 = PowerSet()
        ps3 = PowerSet()
        ps4 = PowerSet()
        ps5 = PowerSet()
        ps6 = PowerSet()

        for n in range(0, 10):
            ps1.put("test" + str(n))

        for n in range(5, 10):
            ps2.put("test" + str(n))

        for n in range(7, 20):
            ps3.put("test" + str(n))

        for n in range(10, 20):
            ps4.put("test" + str(n))

        self.assertEqual(ps1.size(), 10)
        self.assertEqual(ps2.size(), 5)
        self.assertEqual(ps3.size(), 13)
        self.assertEqual(ps4.size(), 10)
        self.assertEqual(ps5.size(), 0)
        self.assertEqual(ps6.size(), 0)

        # все элементы параметра входят в текущее множество
        self.assertTrue(ps1.issubset(ps2))

        # все элементы текущего множества входят в параметр
        self.assertFalse(ps2.issubset(ps1))

        # не все элементы параметра входят в текущее множество
        self.assertFalse(ps3.issubset(ps2))
        self.assertFalse(ps2.issubset(ps3))

        # множества не имеют общих элементов
        self.assertFalse(ps1.issubset(ps4))
        self.assertFalse(ps4.issubset(ps1))

        # в параметре пустое множество
        self.assertFalse(ps1.issubset(ps5))

        # текущее множество -- пустое
        self.assertFalse(ps5.issubset(ps1))

        # оба множества -- пустые
        self.assertFalse(ps5.issubset(ps6))
        self.assertFalse(ps6.issubset(ps5))
Example #6
0
    def test_put(self):
        VALUES = [
            "test1",
            "test2",
            "test1",
            "",
        ]
        ps = PowerSet()
        self.assertEqual(ps.size(), 0)

        # добавление отсутствующего элемента
        ps.put(VALUES[0])
        ps.put(VALUES[1])
        ps.put(VALUES[3])
        self.assertEqual(ps.size(), 3)

        # добавление присутствующего элемента
        ps.put(VALUES[2])
        self.assertEqual(ps.size(), 3)
        ps.put(VALUES[3])
        self.assertEqual(ps.size(), 3)
Example #7
0
    def test_difference(self):
        ps1 = PowerSet()
        ps2 = PowerSet()
        ps3 = PowerSet()
        ps4 = PowerSet()

        for n in range(0, 10):
            ps1.put("test" + str(n))

        for n in range(5, 15):
            ps2.put("test" + str(n))

        for n in range(10, 20):
            ps3.put("test" + str(n))

        for n in range(0, 10):
            ps4.put("test" + str(n))

        self.assertEqual(ps1.size(), 10)
        self.assertEqual(ps2.size(), 10)
        self.assertEqual(ps3.size(), 10)

        # все элементы текущего множества не входят в множество-параметр
        res = ps1.difference(ps3)
        self.assertEqual(res.size(), 10)

        for n in range(0, 10):
            self.assertTrue(res.get("test" + str(n)))

        self.assertFalse(res.get("test10"))

        # в результате пустое множество
        res = ps1.difference(ps4)
        self.assertEqual(res.size(), 0)

        # в результате не пустое множество
        res = ps1.difference(ps2)
        self.assertEqual(res.size(), 5)

        for n in range(0, 5):
            self.assertTrue(res.get("test" + str(n)))

        for n in range(5, 10):
            self.assertFalse(res.get("test" + str(n)))

        res = ps2.difference(ps1)
        self.assertEqual(res.size(), 5)

        for n in range(10, 15):
            self.assertTrue(res.get("test" + str(n)))

        for n in range(5, 10):
            self.assertFalse(res.get("test" + str(n)))
Example #8
0
    def test_union(self):
        ps1 = PowerSet()
        ps2 = PowerSet()
        ps3 = PowerSet()
        ps4 = PowerSet()
        ps5 = PowerSet()

        for n in range(0, 10):
            ps1.put("test" + str(n))

        for n in range(5, 15):
            ps2.put("test" + str(n))

        for n in range(15, 30):
            ps4.put("test" + str(n))

        self.assertEqual(ps1.size(), 10)
        self.assertEqual(ps2.size(), 10)
        self.assertEqual(ps3.size(), 0)
        self.assertEqual(ps4.size(), 15)
        self.assertEqual(ps5.size(), 0)

        # оба параметра непустые
        res = ps1.union(ps2)
        self.assertNotEqual(res, ps1)
        self.assertNotEqual(res, ps2)
        self.assertEqual(res.size(), 15)

        for n in range(0, 15):
            self.assertTrue(res.get("test" + str(n)))

        self.assertFalse(res.get("test15"))

        res = ps1.union(ps4)
        self.assertEqual(res.size(), 25)

        for n in range(0, 10):
            self.assertTrue(res.get("test" + str(n)))

        for n in range(10, 15):
            self.assertFalse(res.get("test" + str(n)))

        for n in range(15, 30):
            self.assertTrue(res.get("test" + str(n)))

        self.assertFalse(res.get("test30"))

        res = ps4.union(ps1)
        self.assertEqual(res.size(), 25)

        for n in range(0, 10):
            self.assertTrue(res.get("test" + str(n)))

        for n in range(10, 15):
            self.assertFalse(res.get("test" + str(n)))

        for n in range(15, 30):
            self.assertTrue(res.get("test" + str(n)))

        self.assertFalse(res.get("test30"))

        # один из параметров -- пустое множество
        res = ps1.union(ps3)
        self.assertEqual(res.size(), 10)

        for n in range(0, 10):
            self.assertTrue(res.get("test" + str(n)))

        self.assertFalse(res.get("test10"))

        res = ps3.union(ps1)
        self.assertEqual(res.size(), 10)

        for n in range(0, 10):
            self.assertTrue(res.get("test" + str(n)))

        self.assertFalse(res.get("test10"))

        # оба множества -- пустые
        res = ps3.union(ps5)
        self.assertEqual(res.size(), 0)
        res = ps5.union(ps3)
        self.assertEqual(res.size(), 0)
Example #9
0
    def test_intersection(self):
        ps1 = PowerSet()
        ps2 = PowerSet()
        ps3 = PowerSet()

        for n in range(0, 10):
            ps1.put("test" + str(n))

        for n in range(5, 15):
            ps2.put("test" + str(n))

        for n in range(10, 20):
            ps3.put("test" + str(n))

        self.assertEqual(ps1.size(), 10)
        self.assertEqual(ps2.size(), 10)
        self.assertEqual(ps3.size(), 10)

        # в результате пустое множество
        res = ps1.intersection(ps3)
        self.assertEqual(res.size(), 0)

        # в результате не пустое множество
        res = ps1.intersection(ps2)
        self.assertEqual(res.size(), 5)

        self.assertFalse(res.get("test4"))

        for n in range(5, 10):
            self.assertTrue(res.get("test" + str(n)))

        self.assertFalse(res.get("test10"))

        res = ps2.intersection(ps3)
        self.assertEqual(res.size(), 5)

        self.assertFalse(res.get("test9"))

        for n in range(10, 15):
            self.assertTrue(res.get("test" + str(n)))

        self.assertFalse(res.get("test15"))