1try:
2    try:
3        from ucollections import namedtuple
4    except ImportError:
5        from collections import namedtuple
6except ImportError:
7    print("SKIP")
8    raise SystemExit
9
10T = namedtuple("Tup", ["foo", "bar"])
11# CPython prints fully qualified name, what we don't bother to do so far
12#print(T)
13for t in T(1, 2), T(bar=1, foo=2):
14    print(t)
15    print(t[0], t[1])
16    print(t.foo, t.bar)
17
18    print(len(t))
19    print(bool(t))
20    print(t + t)
21    print(t * 3)
22
23    print([f for f in t])
24
25    print(isinstance(t, tuple))
26
27    # Check tuple can compare equal to namedtuple with same elements
28    print(t == (t[0], t[1]), (t[0], t[1]) == t)
29
30# Create using positional and keyword args
31print(T(3, bar=4))
32
33try:
34    t[0] = 200
35except TypeError:
36    print("TypeError")
37try:
38    t.bar = 200
39except AttributeError:
40    print("AttributeError")
41
42try:
43    t = T(1)
44except TypeError:
45    print("TypeError")
46
47try:
48    t = T(1, 2, 3)
49except TypeError:
50    print("TypeError")
51
52try:
53    t = T(foo=1)
54except TypeError:
55    print("TypeError")
56
57try:
58    t = T(1, foo=1)
59except TypeError:
60    print("TypeError")
61
62# enough args, but kw is wrong
63try:
64    t = T(1, baz=3)
65except TypeError:
66    print("TypeError")
67
68# bad argument for member spec
69try:
70    namedtuple('T', 1)
71except TypeError:
72    print("TypeError")
73
74# Try single string
75T3 = namedtuple("TupComma", "foo bar")
76t = T3(1, 2)
77print(t.foo, t.bar)
78
79# Try tuple
80T4 = namedtuple("TupTuple", ("foo", "bar"))
81t = T4(1, 2)
82print(t.foo, t.bar)
83
84# Try single string with comma field separator
85# Not implemented so far
86#T2 = namedtuple("TupComma", "foo,bar")
87#t = T2(1, 2)
88