def test_typed_namedtuple_last_defaults_overwritten(self):
     A = typed_namedtuple("A", (("a", "int"), ("b", "int"), ("c", "int")),
                          defaults=[2, 3])
     a = A(5, 44)
     self.assertEqual(a.a, 5)
     self.assertEqual(a.b, 44)
     self.assertEqual(a.c, 3)
 def test_typed_namedtuple_all_defaults(self):
     A = typed_namedtuple("A", (("a", "int"), ("b", "int"), ("c", "int")),
                          defaults=[1, 2, 3])
     a = A()
     self.assertEqual(a.a, 1)
     self.assertEqual(a.b, 2)
     self.assertEqual(a.c, 3)
 def test_typed_namedtuple_getitem_negative(self):
     A = typed_namedtuple("A", (("a", "int"), ("b", "int"), ("c", "int")))
     a = A(1, 2, 3)
     self.assertEqual(a[-1], 3)
     self.assertEqual(a[-2], 2)
     self.assertEqual(a[-3], 1)
     with self.assertRaises(IndexError) as context:
         a[-4]
     self.assertEqual("tuple index out of range", context.exception.args[0])
 def test_typed_namedtuple_too_many_defaults(self):
     with self.assertRaises(TypeError) as context:
         typed_namedtuple("A", (("a", "int"), ("b", "int"), ("c", "int")),
                          defaults=[1, 0, 2, 3])
     self.assertEqual("Got more default values than field names",
                      context.exception.args[0])
 def test_typed_namedtuple_create_dict(self):
     A = typed_namedtuple("A", {"a": "int", "b": "long"})
     a = A(42, 21)
     self.assertEqual(a.a, 42)
     self.assertEqual(a.b, 21)
 def test_typed_namedtuple_create_iter(self):
     A = typed_namedtuple("A", (("a", "int"), ("b", "long")))
     a = A(42, 21)
     self.assertEqual(a.a, 42)
     self.assertEqual(a.b, 21)