@@ -205,8 +205,9 @@ def test_misc_multiply(self):
205205        self .assertRaises (MemoryError , inplacemultiply , [1 , 2 ], PY_SSIZE_T_MAX // 2  +  1 )
206206
207207    def  test_misc_power (self ):
208-         # PyNumber_Power() 
208+         # PyNumber_Power(), PyNumber_InPlacePower()  
209209        power  =  _testcapi .number_power 
210+         inplacepower  =  _testcapi .number_inplacepower 
210211
211212        class  HasPow (WithDunder ):
212213            methname  =  '__pow__' 
@@ -216,6 +217,39 @@ class HasPow(WithDunder):
216217        self .assertRaises (TypeError , power , 4 , 11 , 1.25 )
217218        self .assertRaises (TypeError , power , 4 , 11 , HasPow .with_val (NotImplemented ))
218219        self .assertRaises (TypeError , power , 4 , 11 , object ())
220+         self .assertEqual (inplacepower (4 , 11 , 5 ), pow (4 , 11 , 5 ))
221+         self .assertRaises (TypeError , inplacepower , 4 , 11 , 1.25 )
222+         self .assertRaises (TypeError , inplacepower , 4 , 11 , object ())
223+ 
224+         class  X :
225+             def  __pow__ (* args ):
226+                 return  args 
227+ 
228+         x  =  X ()
229+         self .assertEqual (power (x , 11 ), (x , 11 ))
230+         self .assertEqual (inplacepower (x , 11 ), (x , 11 ))
231+         self .assertEqual (power (x , 11 , 5 ), (x , 11 , 5 ))
232+         self .assertEqual (inplacepower (x , 11 , 5 ), (x , 11 , 5 ))
233+ 
234+         class  X :
235+             def  __rpow__ (* args ):
236+                 return  args 
237+ 
238+         x  =  X ()
239+         self .assertEqual (power (4 , x ), (x , 4 ))
240+         self .assertEqual (inplacepower (4 , x ), (x , 4 ))
241+         # XXX: Three-arg power doesn't use __rpow__. 
242+         self .assertRaises (TypeError , power , 4 , x , 5 )
243+         self .assertRaises (TypeError , inplacepower , 4 , x , 5 )
244+ 
245+         class  X :
246+             def  __ipow__ (* args ):
247+                 return  args 
248+ 
249+         x  =  X ()
250+         self .assertEqual (inplacepower (x , 11 ), (x , 11 ))
251+         # XXX: In-place power doesn't pass the third arg to __ipow__. 
252+         self .assertEqual (inplacepower (x , 11 , 5 ), (x , 11 ))
219253
220254    @cpython_only  
221255    def  test_rshift_print (self ):
0 commit comments