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: sisyp...@cpan.org
      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 {

Reply via email to