7
7
import sys
8
8
9
9
10
+ class MyIndexable (object ):
11
+ def __init__ (self , value ):
12
+ self .value = value
13
+ def __index__ (self ):
14
+ return self .value
15
+
10
16
def test_find ():
11
17
assert "teststring" .find ("test" ) == 0
12
18
assert "teststring" .find ("string" ) == 4
@@ -23,6 +29,31 @@ def test_find():
23
29
assert "teststring" .find ("tst" , None , 2 ) == - 1
24
30
assert "teststring" .find ("st" , None , 4 ) == 2
25
31
32
+ s = 'ahoj cau nazadar ahoj'
33
+ assert s .find ('ahoj' ) == 0
34
+ assert s .find ('ahoj' , 4 ) == 17
35
+ assert s .find ('ahoj' , - 3 ) == - 1
36
+ assert s .find ('ahoj' , - 21 ) == 0
37
+ assert s .find ('cau' , - 21 ) == 5
38
+ assert s .find ('cau' , - 36 , - 10 ) == 5
39
+ assert s .find ('cau' , None ) == 5
40
+ assert s .find ('ahoj' , None ) == 0
41
+ assert s .find ('cau' , None , 8 ) == 5
42
+ assert s .find ('cau' , None , 7 ) == - 1
43
+ assert s .find ('u' , 3 ) == 7
44
+ assert s .find ('u' , 3 , 7 ) == - 1
45
+ assert s .find ('u' , 3 , 8 ) == 7
46
+ assert s .find ('u' , - 18 , - 13 ) == 7
47
+ assert s .find ('u' , - 18 , - 12 ) == 7
48
+ assert s .find ('u' , - 18 , - 14 ) == - 1
49
+ assert s .find ('u' , - 14 , - 13 ) == 7
50
+ assert s .find ('u' , - 12 , - 13 ) == - 1
51
+ assert s .find ('cau' , MyIndexable (4 )) == 5
52
+ assert s .find ('cau' , MyIndexable (5 )) == 5
53
+ assert s .find ('cau' , MyIndexable (5 ), None ) == 5
54
+ assert s .find ('cau' , MyIndexable (5 ), MyIndexable (8 )) == 5
55
+ assert s .find ('cau' , None , MyIndexable (8 )) == 5
56
+
26
57
27
58
def test_rfind ():
28
59
assert "test string test" .rfind ("test" ) == 12
@@ -34,6 +65,20 @@ def test_rfind():
34
65
assert "test string test" .rfind ("test" , 4 , 14 ) == - 1
35
66
assert "test string test" .rfind ("test" , None , 14 ) == 0
36
67
68
+ s = 'ahoj cau nazdar ahoj'
69
+ assert s .rfind ('cau' , None , None ) == 5
70
+ assert s .rfind ('cau' , - 25 , None ) == 5
71
+ assert s .rfind ('cau' , - 25 , - 3 ) == 5
72
+ assert s .rfind ('cau' , - 25 , - 12 ) == 5
73
+ assert s .rfind ('cau' , - 25 , - 13 ) == - 1
74
+ assert s .rfind ('cau' , - 15 , - 12 ) == 5
75
+ assert s .rfind ('cau' , - 14 , - 12 ) == - 1
76
+ assert s .rfind ('ahoj' , - 14 ) == 16
77
+ assert s .rfind ('ahoj' , - 4 ) == 16
78
+ assert s .rfind ('ahoj' , - 3 ) == - 1
79
+ assert s .rfind ('ahoj' , 16 ) == 16
80
+ assert s .rfind ('ahoj' , 16 , 20 ) == 16
81
+ assert s .rfind ('ahoj' , 16 , 19 ) == - 1
37
82
38
83
def test_format ():
39
84
assert "{}.{}" .format ("part1" , "part2" ) == "part1.part2"
@@ -707,13 +752,6 @@ def test_zfill(self):
707
752
708
753
def test_zfill_specialization (self ):
709
754
self .checkequal ('123' , '123' , 'zfill' , True )
710
-
711
- class MyIndexable (object ):
712
- def __init__ (self , value ):
713
- self .value = value
714
- def __index__ (self ):
715
- return self .value
716
-
717
755
self .checkequal ('0123' , '123' , 'zfill' , MyIndexable (4 ))
718
756
719
757
def test_title (self ):
@@ -774,6 +812,76 @@ def test_center_uni(self):
774
812
self .assertEqual ('x' .center (4 , '\U0010FFFF ' ),
775
813
'\U0010FFFF x\U0010FFFF \U0010FFFF ' )
776
814
815
+ # Whether the "contained items" of the container are integers in
816
+ # range(0, 256) (i.e. bytes, bytearray) or strings of length 1
817
+ # (str)
818
+ contains_bytes = False
819
+
820
+ def test_count (self ):
821
+ self .checkequal (3 , 'aaa' , 'count' , 'a' )
822
+ self .checkequal (0 , 'aaa' , 'count' , 'b' )
823
+ self .checkequal (3 , 'aaa' , 'count' , 'a' )
824
+ self .checkequal (0 , 'aaa' , 'count' , 'b' )
825
+ self .checkequal (3 , 'aaa' , 'count' , 'a' )
826
+ self .checkequal (0 , 'aaa' , 'count' , 'b' )
827
+ self .checkequal (0 , 'aaa' , 'count' , 'b' )
828
+ self .checkequal (2 , 'aaa' , 'count' , 'a' , 1 )
829
+ self .checkequal (0 , 'aaa' , 'count' , 'a' , 10 )
830
+ self .checkequal (1 , 'aaa' , 'count' , 'a' , - 1 )
831
+ self .checkequal (3 , 'aaa' , 'count' , 'a' , - 10 )
832
+ self .checkequal (1 , 'aaa' , 'count' , 'a' , 0 , 1 )
833
+ self .checkequal (3 , 'aaa' , 'count' , 'a' , 0 , 10 )
834
+ self .checkequal (2 , 'aaa' , 'count' , 'a' , 0 , - 1 )
835
+ self .checkequal (0 , 'aaa' , 'count' , 'a' , 0 , - 10 )
836
+ self .checkequal (3 , 'aaa' , 'count' , '' , 1 )
837
+ self .checkequal (1 , 'aaa' , 'count' , '' , 3 )
838
+ self .checkequal (0 , 'aaa' , 'count' , '' , 10 )
839
+ self .checkequal (2 , 'aaa' , 'count' , '' , - 1 )
840
+ self .checkequal (4 , 'aaa' , 'count' , '' , - 10 )
841
+
842
+ self .checkequal (1 , '' , 'count' , '' )
843
+ self .checkequal (0 , '' , 'count' , '' , 1 , 1 )
844
+ self .checkequal (0 , '' , 'count' , '' , sys .maxsize , 0 )
845
+
846
+ self .checkequal (0 , '' , 'count' , 'xx' )
847
+ self .checkequal (0 , '' , 'count' , 'xx' , 1 , 1 )
848
+ self .checkequal (0 , '' , 'count' , 'xx' , sys .maxsize , 0 )
849
+
850
+ self .checkraises (TypeError , 'hello' , 'count' )
851
+
852
+ if self .contains_bytes :
853
+ self .checkequal (0 , 'hello' , 'count' , 42 )
854
+ else :
855
+ self .checkraises (TypeError , 'hello' , 'count' , 42 )
856
+
857
+ # For a variety of combinations,
858
+ # verify that str.count() matches an equivalent function
859
+ # replacing all occurrences and then differencing the string lengths
860
+ charset = ['' , 'a' , 'b' ]
861
+ digits = 7
862
+ base = len (charset )
863
+ teststrings = set ()
864
+ for i in range (base ** digits ):
865
+ entry = []
866
+ for j in range (digits ):
867
+ i , m = divmod (i , base )
868
+ entry .append (charset [m ])
869
+ teststrings .add ('' .join (entry ))
870
+ teststrings = [self .fixtype (ts ) for ts in teststrings ]
871
+ for i in teststrings :
872
+ n = len (i )
873
+ for j in teststrings :
874
+ r1 = i .count (j )
875
+ if j :
876
+ r2 , rem = divmod (n - len (i .replace (j , self .fixtype ('' ))),
877
+ len (j ))
878
+ else :
879
+ r2 , rem = len (i )+ 1 , 0
880
+ if rem or r1 != r2 :
881
+ self .assertEqual (rem , 0 , '%s != 0 for %s' % (rem , i ))
882
+ self .assertEqual (r1 , r2 , '%s != %s for %s' % (r1 , r2 , i ))
883
+
884
+
777
885
def test_same_id ():
778
886
empty_ids = set ([id (str ()) for i in range (100 )])
779
887
assert len (empty_ids ) == 1
0 commit comments