22
33import pytest
44
5- from fractional_indexing import FIError , generate_key_between , generate_n_keys_between
5+ from fractional_indexing import FIError , generate_key_between , generate_n_keys_between , validate_order_key
6+
7+
8+ BASE_95_DIGITS = ' !"#$%&\' ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`abcdefghijklmnopqrstuvwxyz{|}~'
69
710
811@pytest .mark .parametrize (['a' , 'b' , 'expected' ], [
@@ -79,11 +82,10 @@ def test_generate_n_keys_between(a: Optional[str], b: Optional[str], n: int, exp
7982 (None , 'A ' , FIError ('invalid order key: A ' )),
8083])
8184def test_base95_digits (a : Optional [str ], b : Optional [str ], expected : str ) -> None :
82- base_95_digits = ' !"#$%&\' ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`abcdefghijklmnopqrstuvwxyz{|}~'
8385 kwargs = {
8486 'a' : a ,
8587 'b' : b ,
86- 'digits' : base_95_digits ,
88+ 'digits' : BASE_95_DIGITS ,
8789 }
8890 if isinstance (expected , FIError ):
8991 with pytest .raises (FIError ) as e :
@@ -98,7 +100,8 @@ def test_base95_digits(a: Optional[str], b: Optional[str], expected: str) -> Non
98100 assert act == expected
99101
100102
101- def test_readme_example ():
103+ def test_readme_examples_single_key ():
104+ # Insert at the beginning
102105 first = generate_key_between (None , None )
103106 assert first == 'a0'
104107
@@ -117,3 +120,40 @@ def test_readme_example():
117120 # Insert in between 2nd and 3rd. Midpoint
118121 second_and_half = generate_key_between (second , third )
119122 assert second_and_half == 'a1V'
123+
124+
125+ def test_readme_examples_multiple_keys ():
126+ # Insert 3 at the beginning
127+ keys = generate_n_keys_between (None , None , n = 3 )
128+ assert keys == ['a0' , 'a1' , 'a2' ]
129+
130+ # Insert 3 after 1st
131+ keys = generate_n_keys_between ('a0' , None , n = 3 )
132+ assert keys == ['a1' , 'a2' , 'a3' ]
133+
134+ # Insert 3 before 1st
135+ keys = generate_n_keys_between (None , 'a0' , n = 3 )
136+ assert keys == ['Zx' , 'Zy' , 'Zz' ]
137+
138+ # Insert 3 in between 2nd and 3rd. Midpoint
139+ keys = generate_n_keys_between ('a1' , 'a2' , n = 3 )
140+ assert keys == ['a1G' , 'a1V' , 'a1l' ]
141+
142+
143+ def test_readme_examples_validate_order_key ():
144+ from fractional_indexing import validate_order_key , FIError
145+
146+ validate_order_key ('a0' )
147+
148+ try :
149+ validate_order_key ('foo' )
150+ except FIError as e :
151+ print (e ) # fractional_indexing.FIError: invalid order key: foo
152+
153+
154+ def test_readme_examples_custom_base ():
155+ validate_order_key ('a ' , digits = BASE_95_DIGITS )
156+ assert generate_key_between (None , None , digits = BASE_95_DIGITS ) == 'a '
157+ assert generate_key_between ('a ' , None , digits = BASE_95_DIGITS ) == 'a!'
158+ assert generate_key_between (None , 'a ' , digits = BASE_95_DIGITS ) == 'Z~'
159+ assert generate_n_keys_between ('a ' , 'a!' , n = 3 , digits = BASE_95_DIGITS ) == ['a 8' , 'a P' , 'a h' ]
0 commit comments