@@ -98,6 +98,34 @@ func test_export_dyn_gd_should_fail_for_wrong_type():
98
98
99
99
assert_fail(" `DynGdExporter.second` should only accept NodeHealth and only if it implements `InstanceIdProvider` trait" )
100
100
101
+
102
+ # Test that relaxed conversions (Variant::try_to_relaxed) are used in both varcall/ptrcall.
103
+ func test_ffi_relaxed_conversions_in_varcall_ptrcall():
104
+ mark_test_pending()
105
+
106
+ # Enforce varcall by having untyped object, and ptrcall by object + arguments typed.
107
+ var varcaller: Variant = ConversionTest.new()
108
+ var ptrcaller: ConversionTest = ConversionTest.new()
109
+
110
+ var result1: String = ptrcaller.accept_f32(42 )
111
+ assert_eq(result1, " 42" , " ptrcall int->f32 should work with relaxed conversion" )
112
+
113
+ var result2: String = ptrcaller.accept_i32(42.7 )
114
+ assert_eq(result2, " 42" , " ptrcall float->i32 should work with relaxed conversion" )
115
+
116
+ var untyped_int: Variant = 42
117
+ var result3 = varcaller.accept_f32(untyped_int)
118
+ assert_eq(result3, " 42" , " varcall int->f32 should work with relaxed conversion" )
119
+
120
+ var untyped_float: Variant = 42.7
121
+ var result4 = varcaller.accept_i32(untyped_float)
122
+ assert_eq(result4, " 42" , " varcall float->i32 should work with relaxed conversion" )
123
+
124
+ # If we reach this point, all conversions succeeded.
125
+ assert_eq(ConversionTest.successful_calls(), 4 , " all calls should succeed with relaxed conversion" )
126
+ mark_test_succeeded()
127
+
128
+
101
129
class MockObjGd extends Object:
102
130
var i: int = 0
103
131
@@ -454,4 +482,3 @@ func test_renamed_func_get_set():
454
482
assert_eq(obj.f1(), 84 )
455
483
456
484
obj.free()
457
-
0 commit comments