@@ -36,6 +36,62 @@ class TestMultiIndexInsertLevel:
3636 [("A" , "middle" , 1 ), ("B" , "middle" , 2 ), ("C" , "middle" , 3 )],
3737 ["level1" , "custom_name" , "level2" ],
3838 ),
39+ (
40+ 0 ,
41+ "start" ,
42+ None ,
43+ [("start" , "A" , 1 ), ("start" , "B" , 2 ), ("start" , "C" , 3 )],
44+ [None , "level1" , "level2" ],
45+ ),
46+ (
47+ 2 ,
48+ "end" ,
49+ None ,
50+ [("A" , 1 , "end" ), ("B" , 2 , "end" ), ("C" , 3 , "end" )],
51+ ["level1" , "level2" , None ],
52+ ),
53+ (
54+ 1 ,
55+ 100 ,
56+ None ,
57+ [("A" , 100 , 1 ), ("B" , 100 , 2 ), ("C" , 100 , 3 )],
58+ ["level1" , None , "level2" ],
59+ ),
60+ (
61+ 1 ,
62+ 1.5 ,
63+ None ,
64+ [("A" , 1.5 , 1 ), ("B" , 1.5 , 2 ), ("C" , 1.5 , 3 )],
65+ ["level1" , None , "level2" ],
66+ ),
67+ (
68+ 1 ,
69+ None ,
70+ None ,
71+ [("A" , None , 1 ), ("B" , None , 2 ), ("C" , None , 3 )],
72+ ["level1" , None , "level2" ],
73+ ),
74+ (
75+ 1 ,
76+ ["X" , "Y" , "Z" ],
77+ None ,
78+ [("A" , "X" , 1 ), ("B" , "Y" , 2 ), ("C" , "Z" , 3 )],
79+ ["level1" , None , "level2" ],
80+ ),
81+ (
82+ 0 ,
83+ "" ,
84+ "empty_string" ,
85+ [("" , "A" , 1 ), ("" , "B" , 2 ), ("" , "C" , 3 )],
86+ ["empty_string" , "level1" , "level2" ],
87+ ),
88+ (
89+ 1 ,
90+ True ,
91+ None ,
92+ [("A" , True , 1 ), ("B" , True , 2 ), ("C" , True , 3 )],
93+ ["level1" , None , "level2" ],
94+ ),
3995 ],
4096 )
4197 def test_insert_level_basic (
@@ -49,27 +105,13 @@ def test_insert_level_basic(
49105 expected = pd .MultiIndex .from_tuples (expected_tuples , names = expected_names )
50106 tm .assert_index_equal (result , expected )
51107
52- @pytest .mark .parametrize (
53- "position, value" ,
54- [
55- (0 , "start" ),
56- (2 , "end" ),
57- ],
58- )
59- def test_insert_level_edge_positions (self , position , value ):
60- simple_idx = pd .MultiIndex .from_tuples (
61- [("A" , 1 ), ("B" , 2 ), ("C" , 3 )], names = ["level1" , "level2" ]
62- )
63-
64- result = simple_idx .insert_level (position , value )
65- assert result .nlevels == 3
66-
67108 @pytest .mark .parametrize (
68109 "position, value, expected_error" ,
69110 [
70111 (5 , "invalid" , "position must be between" ),
71112 (- 1 , "invalid" , "position must be between" ),
72113 (1 , ["too" , "few" ], "Length of values must match" ),
114+ (3 , "value" , "position must be between" ),
73115 ],
74116 )
75117 def test_insert_level_error_cases (self , position , value , expected_error ):
@@ -80,18 +122,6 @@ def test_insert_level_error_cases(self, position, value, expected_error):
80122 with pytest .raises (ValueError , match = expected_error ):
81123 simple_idx .insert_level (position , value )
82124
83- @pytest .mark .parametrize (
84- "value" ,
85- [100 , 1.5 , None ],
86- )
87- def test_insert_level_with_different_data_types (self , value ):
88- simple_idx = pd .MultiIndex .from_tuples (
89- [("A" , 1 ), ("B" , 2 ), ("C" , 3 )], names = ["level1" , "level2" ]
90- )
91-
92- result = simple_idx .insert_level (1 , value )
93- assert result .nlevels == 3
94-
95125 def test_insert_level_preserves_original (self ):
96126 simple_idx = pd .MultiIndex .from_tuples (
97127 [("A" , 1 ), ("B" , 2 ), ("C" , 3 )], names = ["level1" , "level2" ]
@@ -106,18 +136,14 @@ def test_insert_level_empty_index(self):
106136 empty_idx = pd .MultiIndex .from_tuples ([], names = ["level1" , "level2" ])
107137
108138 result = empty_idx .insert_level (0 , [])
109- assert result . nlevels == 3
110- assert len (result ) == 0
139+ expected = pd . MultiIndex . from_tuples ([], names = [ None , "level1" , "level2" ])
140+ tm . assert_index_equal (result , expected )
111141
112- def test_insert_level_with_different_values (self ):
113- simple_idx = pd .MultiIndex .from_tuples (
114- [("A" , 1 ), ("B" , 2 ), ("C" , 3 )], names = ["level1" , "level2" ]
115- )
142+ def test_insert_level_single_element (self ):
143+ single_idx = pd .MultiIndex .from_tuples ([("A" , 1 )], names = ["level1" , "level2" ])
116144
117- new_values = ["X" , "Y" , "Z" ]
118- result = simple_idx .insert_level (1 , new_values )
145+ result = single_idx .insert_level (1 , "middle" )
119146 expected = pd .MultiIndex .from_tuples (
120- [("A" , "X" , 1 ), ("B" , "Y" , 2 ), ("C" , "Z" , 3 )],
121- names = ["level1" , None , "level2" ],
147+ [("A" , "middle" , 1 )], names = ["level1" , None , "level2" ]
122148 )
123149 tm .assert_index_equal (result , expected )
0 commit comments