@@ -69,11 +69,49 @@ def test_empty_sequence(self):
69
69
self .assertRaises (IndexError , lambda : b [- sys .maxsize - 2 ])
70
70
self .assertRaises (IndexError , lambda : b [- 10 ** 100 ])
71
71
72
+ def test_from_iterable (self ):
73
+ b = self .type2test (range (256 ))
74
+ self .assertEqual (len (b ), 256 )
75
+ self .assertEqual (list (b ), list (range (256 )))
76
+
77
+ # Non-sequence iterable.
78
+ b = self .type2test ({42 })
79
+ self .assertEqual (b , b"*" )
80
+ b = self .type2test ({43 , 45 })
81
+ self .assertIn (tuple (b ), {(43 , 45 ), (45 , 43 )})
82
+
83
+ # Iterator that has a __length_hint__.
84
+ b = self .type2test (iter (range (256 )))
85
+ self .assertEqual (len (b ), 256 )
86
+ self .assertEqual (list (b ), list (range (256 )))
87
+
88
+ # Iterator that doesn't have a __length_hint__.
89
+ b = self .type2test (i for i in range (256 ) if i % 2 )
90
+ self .assertEqual (len (b ), 128 )
91
+ self .assertEqual (list (b ), list (range (256 ))[1 ::2 ])
92
+
93
+ # Sequence without __iter__.
94
+ class S :
95
+ def __getitem__ (self , i ):
96
+ return (1 , 2 , 3 )[i ]
97
+ b = self .type2test (S ())
98
+ self .assertEqual (b , b"\x01 \x02 \x03 " )
99
+
100
+ def test_from_tuple (self ):
101
+ # There is a special case for tuples.
102
+ b = self .type2test (tuple (range (256 )))
103
+ self .assertEqual (len (b ), 256 )
104
+ self .assertEqual (list (b ), list (range (256 )))
105
+ b = self .type2test ((1 , 2 , 3 ))
106
+ self .assertEqual (b , b"\x01 \x02 \x03 " )
107
+
72
108
def test_from_list (self ):
73
- ints = list ( range ( 256 ))
74
- b = self .type2test (i for i in ints )
109
+ # There is a special case for lists.
110
+ b = self .type2test (list ( range ( 256 )) )
75
111
self .assertEqual (len (b ), 256 )
76
- self .assertEqual (list (b ), ints )
112
+ self .assertEqual (list (b ), list (range (256 )))
113
+ b = self .type2test ([1 , 2 , 3 ])
114
+ self .assertEqual (b , b"\x01 \x02 \x03 " )
77
115
78
116
def test_from_index (self ):
79
117
b = self .type2test ([Indexable (), Indexable (1 ), Indexable (254 ),
@@ -85,6 +123,8 @@ def test_from_index(self):
85
123
def test_from_buffer (self ):
86
124
a = self .type2test (array .array ('B' , [1 , 2 , 3 ]))
87
125
self .assertEqual (a , b"\x01 \x02 \x03 " )
126
+ a = self .type2test (b"\x01 \x02 \x03 " )
127
+ self .assertEqual (a , b"\x01 \x02 \x03 " )
88
128
89
129
# http://bugs.python.org/issue29159
90
130
# Fallback when __index__ raises exception other than OverflowError
0 commit comments