@@ -223,6 +223,11 @@ int test() {
223223    test_checku64 (double2ufix64_z (3.25 , 2 ), 13 , "double2ufix64_z7" );
224224    test_checki64 (double2ufix64_z (3.0 , -1 ), 1 , "double2fuix64_z8" ); // not very useful 
225225
226+     union  {
227+         uint64_t  u ;
228+         double  d ;
229+     } u64d ;
230+ 
226231    printf ("double2int\n" );
227232    test_checki (double2int (0.0 ), 0 , "double2int1" );
228233    test_checki (double2int (0.25 ), 0 , "double2int1b" );
@@ -236,12 +241,25 @@ int test() {
236241    test_checki (double2int (-0.75 ), -1 , "double2int5" );
237242    test_checki (double2int (-1.0 ), -1 , "double2int5b" );
238243    // todo test correct rounding around maximum precision 
244+     test_checki (double2int (2147483646.0 ), INT32_MAX - 1 , "double2int6" );
239245    test_checki (double2int (2147483647.0 ), INT32_MAX , "double2int6" );
240246    test_checki (double2int (21474836470.0 ), INT32_MAX , "double2int7" );
241247    test_checki (double2int (-2147483648.0 ), INT32_MIN , "double2int8" );
242248    test_checki (double2int (-21474836480.0 ), INT32_MIN , "double2int9" );
243249    test_checki (double2int (-2.5 ), -3 , "double2int10" );
244250    test_checki (double2int (-2.4 ), -3 , "double2int11" );
251+     u64d .u  =  0xc000000000000000ull ;
252+     test_checki (double2int (u64d .d ), -2 , "double2int12" );
253+     u64d .u  =  0xc008000000000000ull ;
254+     test_checki (double2int (u64d .d ), -3 , "double2int12b" );
255+     u64d .u  =  0xc000000000000001ull ;
256+     test_checki (double2int (u64d .d ), -3 , "double2int12c" );
257+     u64d .u  =  0xc000000080000000ull ;
258+     test_checki (double2int (u64d .d ), -3 , "double2int12d" );
259+     u64d .u  =  0xc000000100000000ull ;
260+     test_checki (double2int (u64d .d ), -3 , "double2int12e" );
261+     u64d .u  =  0xc000000100000001ull ;
262+     test_checki (double2int (u64d .d ), -3 , "double2int12f" );
245263
246264    printf ("double2uint\n" );
247265    test_checku (double2uint (0.0 ), 0 , "double2uint1" );
@@ -274,10 +292,6 @@ int test() {
274292    test_checki64 (double2int64 (-21474836480.0 ), -21474836480ll , "double2int649" );
275293    test_checki64 (double2int64 (-2.5 ), -3 , "double2int6410" );
276294    test_checki64 (double2int64 (-2.4 ), -3 , "double2int6411" );
277-     union  {
278-         uint64_t  u ;
279-         double  d ;
280-     } u64d ;
281295    u64d .u  =  0xc000000000000000ull ;
282296    test_checki64 (double2int64 (u64d .d ), -2 , "double2int6412" );
283297    u64d .u  =  0xc008000000000000ull ;
0 commit comments