1use warnings; 2use strict; 3 4use Test::More tests => 356; 5 6$^W = 0; 7require_ok "bigfloat.pl"; 8 9my $f; 10while (<DATA>) { 11 chomp; 12 if (/^&/) { 13 $f = $_; 14 } elsif (/^\$.*/) { 15 eval "$_;"; 16 } else { 17 my @args = split(/:/,$_,-1); 18 my $ans = pop(@args); 19 my $try = "$f('" . join("','", @args) . "');"; 20 my $got = eval($try); 21 $got = "" if !defined($got); 22 is $got, $ans; 23 } 24} 25 261; 27 28__END__ 29&fnorm 30abc:NaN 31 1 a:NaN 321bcd2:NaN 3311111b:NaN 34+1z:NaN 35-1z:NaN 360:+0E+0 37+0:+0E+0 38+00:+0E+0 39+0 0 0:+0E+0 40000000 0000000 00000:+0E+0 41-0:+0E+0 42-0000:+0E+0 43+1:+1E+0 44+01:+1E+0 45+001:+1E+0 46+00000100000:+1E+5 47123456789:+123456789E+0 48-1:-1E+0 49-01:-1E+0 50-001:-1E+0 51-123456789:-123456789E+0 52-00000100000:-1E+5 53123.456a:NaN 54123.456:+123456E-3 550.01:+1E-2 56.002:+2E-3 57-0.0003:-3E-4 58-.0000000004:-4E-10 59123456E2:+123456E+2 60123456E-2:+123456E-2 61-123456E2:-123456E+2 62-123456E-2:-123456E-2 631e1:+1E+1 642e-11:+2E-11 65-3e111:-3E+111 66-4e-1111:-4E-1111 67&fneg 68abd:NaN 69+0:+0E+0 70+1:-1E+0 71-1:+1E+0 72+123456789:-123456789E+0 73-123456789:+123456789E+0 74+123.456789:-123456789E-6 75-123456.789:+123456789E-3 76&fabs 77abc:NaN 78+0:+0E+0 79+1:+1E+0 80-1:+1E+0 81+123456789:+123456789E+0 82-123456789:+123456789E+0 83+123.456789:+123456789E-6 84-123456.789:+123456789E-3 85&fround 86$bigfloat::rnd_mode = 'trunc' 87+10123456789:5:+10123E+6 88-10123456789:5:-10123E+6 89+10123456789:9:+101234567E+2 90-10123456789:9:-101234567E+2 91+101234500:6:+101234E+3 92-101234500:6:-101234E+3 93$bigfloat::rnd_mode = 'zero' 94+20123456789:5:+20123E+6 95-20123456789:5:-20123E+6 96+20123456789:9:+201234568E+2 97-20123456789:9:-201234568E+2 98+201234500:6:+201234E+3 99-201234500:6:-201234E+3 100$bigfloat::rnd_mode = '+inf' 101+30123456789:5:+30123E+6 102-30123456789:5:-30123E+6 103+30123456789:9:+301234568E+2 104-30123456789:9:-301234568E+2 105+301234500:6:+301235E+3 106-301234500:6:-301234E+3 107$bigfloat::rnd_mode = '-inf' 108+40123456789:5:+40123E+6 109-40123456789:5:-40123E+6 110+40123456789:9:+401234568E+2 111-40123456789:9:-401234568E+2 112+401234500:6:+401234E+3 113-401234500:6:-401235E+3 114$bigfloat::rnd_mode = 'odd' 115+50123456789:5:+50123E+6 116-50123456789:5:-50123E+6 117+50123456789:9:+501234568E+2 118-50123456789:9:-501234568E+2 119+501234500:6:+501235E+3 120-501234500:6:-501235E+3 121$bigfloat::rnd_mode = 'even' 122+60123456789:5:+60123E+6 123-60123456789:5:-60123E+6 124+60123456789:9:+601234568E+2 125-60123456789:9:-601234568E+2 126+601234500:6:+601234E+3 127-601234500:6:-601234E+3 128&ffround 129$bigfloat::rnd_mode = 'trunc' 130+1.23:-1:+12E-1 131-1.23:-1:-12E-1 132+1.27:-1:+12E-1 133-1.27:-1:-12E-1 134+1.25:-1:+12E-1 135-1.25:-1:-12E-1 136+1.35:-1:+13E-1 137-1.35:-1:-13E-1 138-0.006:-1:+0E+0 139-0.006:-2:+0E+0 140$bigfloat::rnd_mode = 'zero' 141+2.23:-1:+22E-1 142-2.23:-1:-22E-1 143+2.27:-1:+23E-1 144-2.27:-1:-23E-1 145+2.25:-1:+22E-1 146-2.25:-1:-22E-1 147+2.35:-1:+23E-1 148-2.35:-1:-23E-1 149-0.0065:-1:+0E+0 150-0.0065:-2:-1E-2 151-0.0065:-3:-6E-3 152-0.0065:-4:-65E-4 153-0.0065:-5:-65E-4 154$bigfloat::rnd_mode = '+inf' 155+3.23:-1:+32E-1 156-3.23:-1:-32E-1 157+3.27:-1:+33E-1 158-3.27:-1:-33E-1 159+3.25:-1:+33E-1 160-3.25:-1:-32E-1 161+3.35:-1:+34E-1 162-3.35:-1:-33E-1 163-0.0065:-1:+0E+0 164-0.0065:-2:-1E-2 165-0.0065:-3:-6E-3 166-0.0065:-4:-65E-4 167-0.0065:-5:-65E-4 168$bigfloat::rnd_mode = '-inf' 169+4.23:-1:+42E-1 170-4.23:-1:-42E-1 171+4.27:-1:+43E-1 172-4.27:-1:-43E-1 173+4.25:-1:+42E-1 174-4.25:-1:-43E-1 175+4.35:-1:+43E-1 176-4.35:-1:-44E-1 177-0.0065:-1:+0E+0 178-0.0065:-2:-1E-2 179-0.0065:-3:-7E-3 180-0.0065:-4:-65E-4 181-0.0065:-5:-65E-4 182$bigfloat::rnd_mode = 'odd' 183+5.23:-1:+52E-1 184-5.23:-1:-52E-1 185+5.27:-1:+53E-1 186-5.27:-1:-53E-1 187+5.25:-1:+53E-1 188-5.25:-1:-53E-1 189+5.35:-1:+53E-1 190-5.35:-1:-53E-1 191-0.0065:-1:+0E+0 192-0.0065:-2:-1E-2 193-0.0065:-3:-7E-3 194-0.0065:-4:-65E-4 195-0.0065:-5:-65E-4 196$bigfloat::rnd_mode = 'even' 197+6.23:-1:+62E-1 198-6.23:-1:-62E-1 199+6.27:-1:+63E-1 200-6.27:-1:-63E-1 201+6.25:-1:+62E-1 202-6.25:-1:-62E-1 203+6.35:-1:+64E-1 204-6.35:-1:-64E-1 205-0.0065:-1:+0E+0 206-0.0065:-2:-1E-2 207-0.0065:-3:-6E-3 208-0.0065:-4:-65E-4 209-0.0065:-5:-65E-4 210&fcmp 211abc:abc: 212abc:+0: 213+0:abc: 214+0:+0:0 215-1:+0:-1 216+0:-1:1 217+1:+0:1 218+0:+1:-1 219-1:+1:-1 220+1:-1:1 221-1:-1:0 222+1:+1:0 223+123:+123:0 224+123:+12:1 225+12:+123:-1 226-123:-123:0 227-123:-12:-1 228-12:-123:1 229+123:+124:-1 230+124:+123:1 231-123:-124:1 232-124:-123:-1 233&fadd 234abc:abc:NaN 235abc:+0:NaN 236+0:abc:NaN 237+0:+0:+0E+0 238+1:+0:+1E+0 239+0:+1:+1E+0 240+1:+1:+2E+0 241-1:+0:-1E+0 242+0:-1:-1E+0 243-1:-1:-2E+0 244-1:+1:+0E+0 245+1:-1:+0E+0 246+9:+1:+1E+1 247+99:+1:+1E+2 248+999:+1:+1E+3 249+9999:+1:+1E+4 250+99999:+1:+1E+5 251+999999:+1:+1E+6 252+9999999:+1:+1E+7 253+99999999:+1:+1E+8 254+999999999:+1:+1E+9 255+9999999999:+1:+1E+10 256+99999999999:+1:+1E+11 257+10:-1:+9E+0 258+100:-1:+99E+0 259+1000:-1:+999E+0 260+10000:-1:+9999E+0 261+100000:-1:+99999E+0 262+1000000:-1:+999999E+0 263+10000000:-1:+9999999E+0 264+100000000:-1:+99999999E+0 265+1000000000:-1:+999999999E+0 266+10000000000:-1:+9999999999E+0 267+123456789:+987654321:+111111111E+1 268-123456789:+987654321:+864197532E+0 269-123456789:-987654321:-111111111E+1 270+123456789:-987654321:-864197532E+0 271&fsub 272abc:abc:NaN 273abc:+0:NaN 274+0:abc:NaN 275+0:+0:+0E+0 276+1:+0:+1E+0 277+0:+1:-1E+0 278+1:+1:+0E+0 279-1:+0:-1E+0 280+0:-1:+1E+0 281-1:-1:+0E+0 282-1:+1:-2E+0 283+1:-1:+2E+0 284+9:+1:+8E+0 285+99:+1:+98E+0 286+999:+1:+998E+0 287+9999:+1:+9998E+0 288+99999:+1:+99998E+0 289+999999:+1:+999998E+0 290+9999999:+1:+9999998E+0 291+99999999:+1:+99999998E+0 292+999999999:+1:+999999998E+0 293+9999999999:+1:+9999999998E+0 294+99999999999:+1:+99999999998E+0 295+10:-1:+11E+0 296+100:-1:+101E+0 297+1000:-1:+1001E+0 298+10000:-1:+10001E+0 299+100000:-1:+100001E+0 300+1000000:-1:+1000001E+0 301+10000000:-1:+10000001E+0 302+100000000:-1:+100000001E+0 303+1000000000:-1:+1000000001E+0 304+10000000000:-1:+10000000001E+0 305+123456789:+987654321:-864197532E+0 306-123456789:+987654321:-111111111E+1 307-123456789:-987654321:+864197532E+0 308+123456789:-987654321:+111111111E+1 309&fmul 310abc:abc:NaN 311abc:+0:NaN 312+0:abc:NaN 313+0:+0:+0E+0 314+0:+1:+0E+0 315+1:+0:+0E+0 316+0:-1:+0E+0 317-1:+0:+0E+0 318+123456789123456789:+0:+0E+0 319+0:+123456789123456789:+0E+0 320-1:-1:+1E+0 321-1:+1:-1E+0 322+1:-1:-1E+0 323+1:+1:+1E+0 324+2:+3:+6E+0 325-2:+3:-6E+0 326+2:-3:-6E+0 327-2:-3:+6E+0 328+111:+111:+12321E+0 329+10101:+10101:+102030201E+0 330+1001001:+1001001:+1002003002001E+0 331+100010001:+100010001:+10002000300020001E+0 332+10000100001:+10000100001:+100002000030000200001E+0 333+11111111111:+9:+99999999999E+0 334+22222222222:+9:+199999999998E+0 335+33333333333:+9:+299999999997E+0 336+44444444444:+9:+399999999996E+0 337+55555555555:+9:+499999999995E+0 338+66666666666:+9:+599999999994E+0 339+77777777777:+9:+699999999993E+0 340+88888888888:+9:+799999999992E+0 341+99999999999:+9:+899999999991E+0 342&fdiv 343abc:abc:NaN 344abc:+1:abc:NaN 345+1:abc:NaN 346+0:+0:NaN 347+0:+1:+0E+0 348+1:+0:NaN 349+0:-1:+0E+0 350-1:+0:NaN 351+1:+1:+1E+0 352-1:-1:+1E+0 353+1:-1:-1E+0 354-1:+1:-1E+0 355+1:+2:+5E-1 356+2:+1:+2E+0 357+10:+5:+2E+0 358+100:+4:+25E+0 359+1000:+8:+125E+0 360+10000:+16:+625E+0 361+10000:-16:-625E+0 362+999999999999:+9:+111111111111E+0 363+999999999999:+99:+10101010101E+0 364+999999999999:+999:+1001001001E+0 365+999999999999:+9999:+100010001E+0 366+999999999999999:+99999:+10000100001E+0 367+1000000000:+9:+1111111111111111111111111111111111111111E-31 368+2000000000:+9:+2222222222222222222222222222222222222222E-31 369+3000000000:+9:+3333333333333333333333333333333333333333E-31 370+4000000000:+9:+4444444444444444444444444444444444444444E-31 371+5000000000:+9:+5555555555555555555555555555555555555556E-31 372+6000000000:+9:+6666666666666666666666666666666666666667E-31 373+7000000000:+9:+7777777777777777777777777777777777777778E-31 374+8000000000:+9:+8888888888888888888888888888888888888889E-31 375+9000000000:+9:+1E+9 376+35500000:+113:+3141592920353982300884955752212389380531E-34 377+71000000:+226:+3141592920353982300884955752212389380531E-34 378+106500000:+339:+3141592920353982300884955752212389380531E-34 379+1000000000:+3:+3333333333333333333333333333333333333333E-31 380$bigfloat::div_scale = 20 381+1000000000:+9:+11111111111111111111E-11 382+2000000000:+9:+22222222222222222222E-11 383+3000000000:+9:+33333333333333333333E-11 384+4000000000:+9:+44444444444444444444E-11 385+5000000000:+9:+55555555555555555556E-11 386+6000000000:+9:+66666666666666666667E-11 387+7000000000:+9:+77777777777777777778E-11 388+8000000000:+9:+88888888888888888889E-11 389+9000000000:+9:+1E+9 390+35500000:+113:+314159292035398230088E-15 391+71000000:+226:+314159292035398230088E-15 392+106500000:+339:+31415929203539823009E-14 393+1000000000:+3:+33333333333333333333E-11 394$bigfloat::div_scale = 40 395&fsqrt 396+0:+0E+0 397-1:NaN 398-2:NaN 399-16:NaN 400-123.456:NaN 401+1:+1E+0 402+1.44:+12E-1 403+2:+141421356237309504880168872420969807857E-38 404+4:+2E+0 405+16:+4E+0 406+100:+1E+1 407+123.456:+1111107555549866648462149404118219234119E-38 408+15241.383936:+123456E-3 409