Mon Jul 10 08:56:55 2023: Request 148964 was acted upon.
Transaction: Ticket created by SISYPHUS
Queue: Win32-API
Subject: 2 failing tests when nvtype is either 'long double' or
'__float128' (with patch)
Broken in: (no value)
Severity: (no value)
Owner: Nobody
Requestors: [email protected]
Status: new
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=148964 >
In Win32-API-0.84, one test in t/00_API.t and one test in
Callback/t/02_Callback.t fail if $Config{nvtype} is either 'long double' or
'__float128'.
The attached patch to the 2 offending test scripts addresses this issue.
Cheers,
Rob
--- t/00_API.t_orig 2016-01-21 17:09:22.000000000 +1100
+++ t/00_API.t 2023-07-10 22:26:08.646253600 +1000
@@ -190,7 +190,16 @@
ok(defined($function), 'API_test.dll sum_doubles function defined');
#diag("$function->{procname} \$^E=",$^E);
-ok($function->Call(2.5, 3.2) == 5.7, 'function call with double arguments');
+
+$result = $function->Call(2.5, 3.2);
+# $result holds the double precision value of the double 2.5 plus the double
3.2.
+# If nvtype is double, expect $result == sprintf("%.17g", $result) -
5.7000000000000002
+# If nvtype is long double, expect $result == sprintf("%.21g", $result) -
5.70000000000000017764
+# If nvtype is __float128, expect $result == sprintf("%.36g", $result) -
5.70000000000000017763568394002504647
+my $expected = $Config{nvtype} eq '__float128' ?
5.70000000000000017763568394002504647
+ : $Config{nvtype} eq 'double' ?
5.7
+ :
5.70000000000000017764;
+cmp_ok($result, '==', $expected, 'function call with double arguments');
# Same as above, with a pointer
$function =
--- Callback/t/02_Callback.t_orig 2016-01-21 17:09:22.000000000 +1100
+++ Callback/t/02_Callback.t 2023-07-10 22:40:31.256917000 +1000
@@ -196,7 +196,14 @@
);
$function = new Win32::API($test_dll, 'do_callback_void_d', 'K', 'D');
$result = $function->Call($callback);
-is($result, 9876.5432, "do_callback_void_d was successful");
+# $result holds the double precision value 9876.5432.
+# If nvtype is double, expect $result == sprintf("%.17g", $result) -
9876.5432000000001
+# If nvtype is long double, expect $result == sprintf("%.21g", $result) -
9876.54320000000006985
+# If nvtype is __float128, expect $result == sprintf("%.36g", $result) -
9876.54320000000006984919309616088867
+my $expected = $Config{nvtype} eq '__float128' ?
9876.54320000000006984919309616088867
+ : $Config{nvtype} eq 'double' ?
9876.5432000000001
+ :
9876.54320000000006985;
+cmp_ok($result, '==', $expected, "do_callback_void_d was successful");
$callback = Win32::API::Callback->new(
sub {