@@ -95,6 +95,7 @@ public void SetUp()
9595 CSharpModel . LastDelegateCalled = null ;
9696 CSharpModel . LastFuncCalled = null ;
9797 CSharpModel . MethodCalled = null ;
98+ CSharpModel . ProvidedArgument = null ;
9899 }
99100
100101 [ Test ]
@@ -1360,6 +1361,47 @@ def call_method_with_action3():
13601361 Assert . AreEqual ( expectedInnerMethodCalled , CSharpModel . LastFuncCalled ) ;
13611362 }
13621363
1364+ [ Test ]
1365+ public void NumericArgumentsTakePrecedenceOverEnums ( )
1366+ {
1367+ using var _ = Py . GIL ( ) ;
1368+
1369+ var module = PyModule . FromString ( "NumericArgumentsTakePrecedenceOverEnums" , @$ "
1370+ from clr import AddReference
1371+ AddReference(""System"")
1372+ from Python.EmbeddingTest import *
1373+ from System import DayOfWeek
1374+
1375+ def call_method_with_int():
1376+ TestMethodBinder.CSharpModel().NumericalArgumentMethod(1)
1377+
1378+ def call_method_with_float():
1379+ TestMethodBinder.CSharpModel().NumericalArgumentMethod(0.1)
1380+
1381+ def call_method_with_numpy_float():
1382+ TestMethodBinder.CSharpModel().NumericalArgumentMethod(TestMethodBinder.Numpy.float64(0.1))
1383+
1384+ def call_method_with_enum():
1385+ TestMethodBinder.CSharpModel().NumericalArgumentMethod(DayOfWeek.MONDAY)
1386+ " ) ;
1387+
1388+ module . GetAttr ( "call_method_with_int" ) . Invoke ( ) ;
1389+ Assert . AreEqual ( typeof ( int ) , CSharpModel . ProvidedArgument . GetType ( ) ) ;
1390+ Assert . AreEqual ( 1 , CSharpModel . ProvidedArgument ) ;
1391+
1392+ module . GetAttr ( "call_method_with_float" ) . Invoke ( ) ;
1393+ Assert . AreEqual ( typeof ( double ) , CSharpModel . ProvidedArgument . GetType ( ) ) ;
1394+ Assert . AreEqual ( 0.1d , CSharpModel . ProvidedArgument ) ;
1395+
1396+ module . GetAttr ( "call_method_with_numpy_float" ) . Invoke ( ) ;
1397+ Assert . AreEqual ( typeof ( decimal ) , CSharpModel . ProvidedArgument . GetType ( ) ) ;
1398+ Assert . AreEqual ( 0.1m , CSharpModel . ProvidedArgument ) ;
1399+
1400+ module . GetAttr ( "call_method_with_enum" ) . Invoke ( ) ;
1401+ Assert . AreEqual ( typeof ( DayOfWeek ) , CSharpModel . ProvidedArgument . GetType ( ) ) ;
1402+ Assert . AreEqual ( DayOfWeek . Monday , CSharpModel . ProvidedArgument ) ;
1403+ }
1404+
13631405 // Used to test that we match this function with Py DateTime & Date Objects
13641406 public static int GetMonth ( DateTime test )
13651407 {
@@ -1442,6 +1484,10 @@ public void NumericalArgumentMethod(decimal value)
14421484 {
14431485 ProvidedArgument = value ;
14441486 }
1487+ public void NumericalArgumentMethod ( DayOfWeek value )
1488+ {
1489+ ProvidedArgument = value ;
1490+ }
14451491 public void EnumerableKeyValuePair ( IEnumerable < KeyValuePair < string , decimal > > value )
14461492 {
14471493 ProvidedArgument = value ;
0 commit comments