コード例 #1
0
    def test_constructors(self):
        """
        Test NumDict constructors
        """
        # dicts for testing
        dict_0 = {}  # Empty dictionary
        dict_1 = {1: "Elephant"}  # Single numeric key
        dict_2 = {1: "Elephant", 2: "Mouse"}  # Multiple numeric keys
        dict_3 = {"3": "Aardvark"}  # Numeric string key
        dict_4 = {"3": "Aardvark", "4": "Ant"}  # Multiple numeric string keys
        dict_5 = {
            5: "Cat",
            "6": "Dog"
        }  # Mixed numeric and numeric string keys
        dict_6 = {1: None, "2": None}  # None as values
        dict_7 = {0: "Empty"}  # None as key

        # Construct NumDicts from dicts
        num_dict = NumDict()
        num_dict_0 = NumDict(dict_0)
        num_dict_1 = NumDict(dict_1)
        num_dict_2 = NumDict(dict_2)
        num_dict_3 = NumDict(dict_3)
        num_dict_4 = NumDict(dict_4)
        num_dict_5 = NumDict(dict_5)
        num_dict_6 = NumDict(dict_6)
        num_dict_7 = NumDict(dict_7)

        # Most NumDicts from dicts should compare equal...
        assert num_dict == {}
        assert num_dict_0 == dict_0
        assert num_dict_1 == dict_1
        assert num_dict_2 == dict_2

        # ...however, numeric keys are not equal to numeric string keys...
        assert num_dict_3 != dict_3
        assert num_dict_4 != dict_4
        assert num_dict_5 != dict_5
        assert num_dict_6 != dict_6

        assert num_dict_7 == dict_7

        # Construct dicts from NumDicts
        dict_from_num_dict = dict(num_dict)
        dict_from_num_dict_1 = dict(num_dict_1)
        dict_from_num_dict_2 = dict(num_dict_2)
        dict_from_num_dict_3 = dict(num_dict_3)
        dict_from_num_dict_4 = dict(num_dict_4)
        dict_from_num_dict_5 = dict(num_dict_5)
        dict_from_num_dict_6 = dict(num_dict_6)
        dict_from_num_dict_7 = dict(num_dict_7)

        # All dicts from NumDicts should compare equal
        assert num_dict == dict_from_num_dict
        assert num_dict_1 == dict_from_num_dict_1
        assert num_dict_2 == dict_from_num_dict_2
        assert num_dict_3 == dict_from_num_dict_3
        assert num_dict_4 == dict_from_num_dict_4
        assert num_dict_5 == dict_from_num_dict_5
        assert num_dict_6 == dict_from_num_dict_6
        assert num_dict_7 == dict_from_num_dict_7

        # Construct NumDicts from NumDicts
        num_dict_from_num_dict = NumDict(num_dict)
        num_dict_from_num_dict_0 = NumDict(num_dict_0)
        num_dict_from_num_dict_1 = NumDict(num_dict_1)
        num_dict_from_num_dict_2 = NumDict(num_dict_2)
        num_dict_from_num_dict_3 = NumDict(num_dict_3)
        num_dict_from_num_dict_4 = NumDict(num_dict_4)
        num_dict_from_num_dict_5 = NumDict(num_dict_5)
        num_dict_from_num_dict_6 = NumDict(num_dict_6)
        num_dict_from_num_dict_7 = NumDict(num_dict_7)

        # All NumDicts from NumDicts should compare equal
        assert num_dict == num_dict_from_num_dict
        assert num_dict_0 == num_dict_from_num_dict_0
        assert num_dict_1 == num_dict_from_num_dict_1
        assert num_dict_2 == num_dict_from_num_dict_2
        assert num_dict_3 == num_dict_from_num_dict_3
        assert num_dict_4 == num_dict_from_num_dict_4
        assert num_dict_5 == num_dict_from_num_dict_5
        assert num_dict_6 == num_dict_from_num_dict_6
        assert num_dict_7 == num_dict_from_num_dict_7

        # keyword arg constructor should fail
        with self.assertRaises(TypeError):
            NumDict(
                one=1,
                two=2)  # Raise TypeError since we can't have numeric keywords

        # item sequence constructors work fine...
        assert NumDict([(1, "Elephant"), (2, "Mouse")]) == dict_from_num_dict_2
        assert NumDict(dict=[(1,
                              "Elephant"), (2,
                                            "Mouse")]) == dict_from_num_dict_2
        assert NumDict([(1, "Elephant"),
                        ("2", "Mouse")]) == dict_from_num_dict_2
        assert NumDict(dict=[("1",
                              "Elephant"), (2,
                                            "Mouse")]) == dict_from_num_dict_2

        # ...unless you have a non-numeric key
        with self.assertRaises(TypeError):
            NumDict([("Rat", 11), ("Snake", 12)])
        with self.assertRaises(TypeError):
            NumDict(dict=[("Rat", 11), ("Snake", 12)])

        # combining item sequence constructors with keyword args does not work
        with self.assertRaises(
                TypeError
        ):  # Raise TypeError since we can't have numeric keywords
            NumDict([(1, "one"), (2, "two")], two=3, five=4)

        # alternate constructors
        dict_8 = {1: "Echo", 2: "Echo"}

        assert NumDict.fromkeys("1 2".split()) == dict_from_num_dict_6
        assert NumDict().fromkeys("1 2".split()) == dict_from_num_dict_6
        assert NumDict.fromkeys("1 2".split(), "Echo") == dict_8
        assert NumDict().fromkeys("1 2".split(), "Echo") == dict_8
        assert num_dict_1.fromkeys("1 2".split()) is not num_dict_1
        self.assertIsInstance(num_dict_1.fromkeys("1 2".split()), NumDict)
        self.assertIsInstance(num_dict_2.fromkeys("1 2".split()), NumDict)
        self.assertIsInstance(num_dict_3.fromkeys("1 2".split()), NumDict)
        self.assertIsInstance(num_dict_4.fromkeys("1 2".split()), NumDict)
コード例 #2
0
    def test_constructors(self):
        """
        Test NumDict constructors
        """
        # dicts for testing
        dict_0 = {}  # Empty dictionary
        dict_1 = {1: 'Elephant'}  # Single numeric key
        dict_2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
        dict_3 = {'3': 'Aardvark'}  # Numeric string key
        dict_4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
        dict_5 = {
            5: 'Cat',
            '6': 'Dog'
        }  # Mixed numeric and numeric string keys
        dict_6 = {1: None, '2': None}  # None as values
        dict_7 = {0: 'Empty'}  # None as key

        # Construct NumDicts from dicts
        num_dict = NumDict()
        num_dict_0 = NumDict(dict_0)
        num_dict_1 = NumDict(dict_1)
        num_dict_2 = NumDict(dict_2)
        num_dict_3 = NumDict(dict_3)
        num_dict_4 = NumDict(dict_4)
        num_dict_5 = NumDict(dict_5)
        num_dict_6 = NumDict(dict_6)
        num_dict_7 = NumDict(dict_7)

        # Most NumDicts from dicts should compare equal...
        self.assertEqual(num_dict, {})
        self.assertEqual(num_dict_0, dict_0)
        self.assertEqual(num_dict_1, dict_1)
        self.assertEqual(num_dict_2, dict_2)

        # ...however, numeric keys are not equal to numeric string keys...
        self.assertNotEqual(num_dict_3, dict_3)
        self.assertNotEqual(num_dict_4, dict_4)
        self.assertNotEqual(num_dict_5, dict_5)
        self.assertNotEqual(num_dict_6, dict_6)

        self.assertEqual(num_dict_7, dict_7)

        # Construct dicts from NumDicts
        dict_from_num_dict = dict(num_dict)
        dict_from_num_dict_1 = dict(num_dict_1)
        dict_from_num_dict_2 = dict(num_dict_2)
        dict_from_num_dict_3 = dict(num_dict_3)
        dict_from_num_dict_4 = dict(num_dict_4)
        dict_from_num_dict_5 = dict(num_dict_5)
        dict_from_num_dict_6 = dict(num_dict_6)
        dict_from_num_dict_7 = dict(num_dict_7)

        # All dicts from NumDicts should compare equal
        self.assertEqual(num_dict, dict_from_num_dict)
        self.assertEqual(num_dict_1, dict_from_num_dict_1)
        self.assertEqual(num_dict_2, dict_from_num_dict_2)
        self.assertEqual(num_dict_3, dict_from_num_dict_3)
        self.assertEqual(num_dict_4, dict_from_num_dict_4)
        self.assertEqual(num_dict_5, dict_from_num_dict_5)
        self.assertEqual(num_dict_6, dict_from_num_dict_6)
        self.assertEqual(num_dict_7, dict_from_num_dict_7)

        # Construct NumDicts from NumDicts
        num_dict_from_num_dict = NumDict(num_dict)
        num_dict_from_num_dict_0 = NumDict(num_dict_0)
        num_dict_from_num_dict_1 = NumDict(num_dict_1)
        num_dict_from_num_dict_2 = NumDict(num_dict_2)
        num_dict_from_num_dict_3 = NumDict(num_dict_3)
        num_dict_from_num_dict_4 = NumDict(num_dict_4)
        num_dict_from_num_dict_5 = NumDict(num_dict_5)
        num_dict_from_num_dict_6 = NumDict(num_dict_6)
        num_dict_from_num_dict_7 = NumDict(num_dict_7)

        # All NumDicts from NumDicts should compare equal
        self.assertEqual(num_dict, num_dict_from_num_dict)
        self.assertEqual(num_dict_0, num_dict_from_num_dict_0)
        self.assertEqual(num_dict_1, num_dict_from_num_dict_1)
        self.assertEqual(num_dict_2, num_dict_from_num_dict_2)
        self.assertEqual(num_dict_3, num_dict_from_num_dict_3)
        self.assertEqual(num_dict_4, num_dict_from_num_dict_4)
        self.assertEqual(num_dict_5, num_dict_from_num_dict_5)
        self.assertEqual(num_dict_6, num_dict_from_num_dict_6)
        self.assertEqual(num_dict_7, num_dict_from_num_dict_7)

        # keyword arg constructor should fail
        with self.assertRaises(TypeError):
            NumDict(
                one=1,
                two=2)  # Raise TypeError since we can't have numeric keywords

        # item sequence constructors work fine...
        self.assertEqual(NumDict([(1, 'Elephant'), (2, 'Mouse')]),
                         dict_from_num_dict_2)
        self.assertEqual(NumDict(dict=[(1, 'Elephant'), (2, 'Mouse')]),
                         dict_from_num_dict_2)
        self.assertEqual(NumDict([(1, 'Elephant'), ('2', 'Mouse')]),
                         dict_from_num_dict_2)
        self.assertEqual(NumDict(dict=[('1', 'Elephant'), (2, 'Mouse')]),
                         dict_from_num_dict_2)

        # ...unless you have a non-numeric key
        with self.assertRaises(TypeError):
            NumDict([('Rat', 11), ('Snake', 12)])
        with self.assertRaises(TypeError):
            NumDict(dict=[('Rat', 11), ('Snake', 12)])

        # combining item sequence constructors with keyword args does not work
        with self.assertRaises(
                TypeError
        ):  # Raise TypeError since we can't have numeric keywords
            NumDict([(1, 'one'), (2, 'two')], two=3, five=4)

        # alternate constructors
        dict_8 = {1: 'Echo', 2: 'Echo'}

        self.assertEqual(NumDict.fromkeys('1 2'.split()), dict_from_num_dict_6)
        self.assertEqual(NumDict().fromkeys('1 2'.split()),
                         dict_from_num_dict_6)
        self.assertEqual(NumDict.fromkeys('1 2'.split(), 'Echo'), dict_8)
        self.assertEqual(NumDict().fromkeys('1 2'.split(), 'Echo'), dict_8)
        self.assertTrue(num_dict_1.fromkeys('1 2'.split()) is not num_dict_1)
        self.assertIsInstance(num_dict_1.fromkeys('1 2'.split()), NumDict)
        self.assertIsInstance(num_dict_2.fromkeys('1 2'.split()), NumDict)
        self.assertIsInstance(num_dict_3.fromkeys('1 2'.split()), NumDict)
        self.assertIsInstance(num_dict_4.fromkeys('1 2'.split()), NumDict)