620: fraccheck 2'); fraccheck(101^270, 103^111, 105^200, '621: fraccheck 3'); a = 0xffff0000ffffffff00000000ffff0000000000000000ffff; b = 0x555544440000000000000000000000000000000011112222333344440000; c = 0x999911113333000011111111000022220000000000000000333300000000ffff; d = 0x3333ffffffff0000000000000000ffffffffffffffff000000000000; algcheck(a, a, '622: algcheck 1'); algcheck(a, b, '623: algcheck 2'); algcheck(a, c, '624: algcheck 3'); algcheck(a, d, '625: algcheck 4'); algcheck(b, b, '626: algcheck 5'); algcheck(b, c, '627: algcheck 6'); algcheck(b, d, '628: algcheck 7'); algcheck(c, c, '629: algcheck 8'); algcheck(c, d, '630: algcheck 9'); algcheck(d, d, '631: algcheck 10'); print '632: Ending test_bignums'; } print '016: parsed test_bignums()'; /* * Test many of the built-in functions. */ define test_functions() { local a, b; local pi; local h, n, r, m, v; local n2, m2, v2; local t; print '700: Beginning test_functions'; vrfy(abs(3) == 3, '701: abs(3) == 3'); vrfy(abs(-4) == 4, '702: abs(-4) == 4'); vrfy(avg(7) == 7, '703: avg(7) == 7'); vrfy(avg(3,5) == 4, '704: avg(3,5) == 4'); vrfy(cmp(2,3) == -1, '705: cmp(2,3) == -1'); vrfy(cmp(6,6) == 0, '706: cmp(6,6) == 0'); vrfy(cmp(7,4) == 1, '707: cmp(7,4) == 1'); vrfy(comb(9,9) == 1, '708: comb(9,9) == 1'); vrfy(comb(5,2) == 10, '709: comb(5,2) == 10'); vrfy(conj(4) == 4, '710: conj(4) == 4'); vrfy(conj(2-3i) == 2+3i, '711: conj(2-3i) == 2+3i'); vrfy(den(17) == 1, '712: den(17) == 1'); vrfy(den(3/7) == 7, '713: den(3/7) == 7'); vrfy(den(-2/3) == 3, '714: den(-2/3) == 3'); vrfy(digits(0) == 1, '715: digits(0) == 1'); vrfy(digits(9) == 1, '716: digits(9) == 1'); vrfy(digits(10) == 2, '717: digits(10) == 2'); vrfy(digits(-691) == 3, '718: digits(-691) == 3'); vrfy(eval('2+3') == 5, "719: eval('2+3') == 5"); vrfy(fcnt(11,3) == 0, '720: fcnt(11,3) == 0'); vrfy(fcnt(18,3) == 2, '721: fcnt(18,3) == 2'); vrfy(fib(0) == 0, '722: fib(0) == 0'); vrfy(fib(1) == 1, '723: fib(1) == 1'); vrfy(fib(9) == 34, '724: fib(9) == 34'); vrfy(frem(12,5) == 12, '725: frem(12,5) == 12'); vrfy(frem(45,3) == 5, '726: frem(45,3) == 5'); vrfy(fact(0) == 1, '727: fact(0) == 1'); vrfy(fact(1) == 1, '728: fact(1) == 1'); vrfy(fact(5) == 120, '729: fact(5) == 120'); vrfy(frac(3) == 0, '730: frac(3) == 0'); vrfy(frac(2/3) == 2/3, '731: frac(2/3) == 2/3'); vrfy(frac(17/3) == 2/3, '732: frac(17/3) == 2/3'); vrfy(gcd(0,3) == 3, '733: gcd(0,3) == 3'); vrfy(gcd(1,12) == 1, '734: gcd(1,12) == 1'); vrfy(gcd(11,7) == 1, '735: gcd(11,7) == 1'); vrfy(gcd(20,65) == 5, '736: gcd(20,65) == 5'); vrfy(gcdrem(20,3) == 20, '737: gcdrem(20,3) == 20'); vrfy(gcdrem(100,6) == 25, '738: gcdrem(100,6) == 25'); vrfy(highbit(1) == 0, '739: highbit(1) == 0'); vrfy(highbit(15) == 3, '740: highbit(15) == 3'); vrfy(hypot(3,4) == 5, '741: hypot(3,4) == 5'); vrfy(ilog(90,3) == 4, '742: ilog(90,3) == 4'); vrfy(ilog10(123) == 2, '743: ilog10(123) == 2'); vrfy(ilog2(17) == 4, '744: ilog2(17) == 4'); vrfy(im(3) == 0, '745: im(3) == 0'); vrfy(im(2+3i) == 3, '746: im(2+3i) == 3'); vrfy(fact(20) == 2432902008176640000, '747: fact(20) == 2432902008176640000'); vrfy(fact(100) == 100*fact(99), '748: fact(100) == 100*fact(99)'); vrfy(comb(100,25) == 100!/75!/25!, '749: comb(100,25) == 100!/75!/25!'); vrfy(perm(100,50) == 100!/50!, '750: perm(100,50) == 100!/50!'); print '751: test unused'; print '752: test unused'; print '753: test unused'; print '754: test unused'; print '755: test unused'; print '756: test unused'; vrfy(int(5) == 5, '757: int(5) == 5'); vrfy(int(19/3) == 6, '758: int(19/3) == 6'); vrfy(inverse(3/2) == 2/3, '759: inverse(3/2) == 2/3'); vrfy(iroot(18,2) == 4, '760: iroot(18,2) == 4'); vrfy(iroot(100,3) == 4, '761: iroot(100,3) == 4'); vrfy(iseven(10) == 1, '762: iseven(10) == 1'); vrfy(iseven(13) == 0, '763: iseven(13) == 0'); vrfy(iseven('a') == 0, "764: iseven('a') == 0"); vrfy(isint(7) == 1, '765: isint(7) == 1'); vrfy(isint(19/2) == 0, '766: isint(19/2) == 0'); vrfy(isint('a') == 0, "767: isint('a') == 0"); vrfy(islist(3) == 0, '768: islist(3) == 0'); vrfy(islist(list(2,3)) == 1, '769: islist(list(2,3)) == 1'); vrfy(ismat(3) == 0, '770: ismat(3) == 0'); vrfy(ismult(7,3) == 0, '771: ismult(7,3) == 0'); vrfy(ismult(15,5) == 1, '772: ismult(15,5) == 1'); vrfy(isnull(3) == 0, '773: isnull(3) == 0'); vrfy(isnull(null()) == 1, '774: isnull(null()) == 1'); vrfy(isnum(2/3) == 1, '775: isnum(2/3) == 1'); vrfy(isnum('xx') == 0, "776: isnum('xx') == 0"); vrfy(isobj(3) == 0, '777: isobj(3) == 0'); vrfy(isodd(7) == 1, '778: isodd(7) == 1'); vrfy(isodd(8) == 0, '779: isodd(8) == 0'); vrfy(isodd('x') == 0, "780: isodd('a') == 0"); vrfy(isqrt(27) == 5, '781: isqrt(27) == 5'); vrfy(isreal(3) == 1, '782: isreal(3) == 1'); vrfy(isreal('x') == 0, "783: isreal('x') == 0"); vrfy(isreal(2+3i) == 0, '784: isreal(2+3i) == 0'); vrfy(isstr(5) == 0, '785: isstr(5) == 0'); vrfy(isstr('foo') == 1, "786: isstr('foo') == 1"); vrfy(isrel(10,14) == 0, '787: isrel(10,14) == 0'); vrfy(isrel(15,22) == 1, '788: isrel(15,22) == 1'); vrfy(issimple(6) == 1, '789: issimple(6) == 1'); vrfy(issimple(3-2i) == 1, '790: issimple(3-2i) == 1'); vrfy(issimple(list(5)) == 0, '791: issimple(list(5)) == 0'); vrfy(issq(26) == 0, '792: issq(26) == 0'); vrfy(issq(9/4) == 1, '793: issq(9/4) == 1'); print '794: test unused'; vrfy(istype(9,4) == 1, '795: istype(9,4) == 1'); vrfy(istype(3,'xx') == 0, "796: istype(3,'xx') == 0"); vrfy(jacobi(5,11) == 1, '797: jacobi(2,7) == 1'); vrfy(jacobi(6,13) == -1, '798: jacobi(6,13) == -1'); vrfy(lcm(3,4,5,6) == 60, '799: lcm(3,4,5,6) == 60'); vrfy(lcmfact(8) == 840, '800: lcmfact(8) == 840'); vrfy(lfactor(21,5) == 3, '801: lfactor(21,5) == 3'); vrfy(lfactor(97,20) == 1, '802: lfactor(97,20) == 1'); vrfy(lowbit(12) == 2, '803: lowbit(12) == 2'); vrfy(lowbit(17) == 0, '804: lowbit(17) == 0'); vrfy(ltol(1) == 0, '805: ltol(1) == 0'); vrfy(max(3,-9,7,4) == 7, '806: max(3,-9,7,4) == 7'); vrfy(meq(13,33,10) == 1, '807: meq(13,33,10) == 1'); vrfy(meq(7,19,11) == 0, '808: meq(7,19,11) == 0'); vrfy(min(9,5,12) == 5, '809: min(9,5,12) == 5'); vrfy(minv(13,97) == 15, '810: minv(13,97) == 15'); vrfy(mne(16,37,10) == 1, '811: mne(16,37,10) == 1'); vrfy(mne(46,79,11) == 0, '812: mne(46,79,11) == 0'); vrfy(norm(4) == 16, '813: norm(4) == 16'); vrfy(norm(2-3i) == 13, '814: norm(2-3i) == 13'); vrfy(num(7) == 7, '815: num(7) == 7'); vrfy(num(11/4) == 11, '816: num(11/4) == 11'); vrfy(num(-9/5) == -9, '817: num(-9/5) == -9'); vrfy(char(ord('a')+2) == 'c', "818: char(ord('a')+2) == 'c'"); vrfy(perm(7,3) == 210, '819: perm(7,3) == 210'); vrfy(pfact(10) == 210, '820: pfact(10) == 210'); vrfy(places(3/7) == -1, '821: places(3/7) == -1'); vrfy(places(.347) == 3, '822: places(.347) == 3'); vrfy(places(17) == 0, '823: places(17) == 0'); vrfy(pmod(3,36,37) == 1, '824: pmod(3,36,37) == 1'); vrfy(poly(2,3,5,2) == 19, '825: poly(2,3,5,2) == 19'); vrfy(ptest(101,10) == 1, '826: ptest(101,10) == 1'); vrfy(ptest(221,30) == 0, '827: ptest(221,30) == 0'); vrfy(re(9) == 9, '828: re(9) == 9'); vrfy(re(-7+3i) == -7, '829: re(-7+3i) == -7'); vrfy(scale(3,4) == 48, '830: scale(3,4) == 48'); vrfy(sgn(-4) == -1, '831: sgn(-4) == -1'); vrfy(sgn(0) == 0, '832: sgn(0) == 0'); vrfy(sgn(3) == 1, '833: sgn(3) == 1'); vrfy(size(7) == 1, '834: size(7) == 1'); vrfy(sqrt(121) == 11, '835: sqrt(121) == 11'); vrfy(ssq(2,3,4) == 29, '836: ssq(2,3,4) == 29'); vrfy(str(45) == '45', "837: str(45) == '45'"); vrfy(strcat('a','bc','def')=='abcdef', "838: strcat('a','bc','def')=='abcdef'"); vrfy(strlen('') == 0, "839: strlen('') == 0"); vrfy(strlen('abcd') == 4, "840: strlen('abcd') == 4"); vrfy(substr('abcd',2,1) == 'b', "841: substr('abcd',2,1) == 'b'"); vrfy(substr('abcd',3,4) == 'cd', "842: substr('abcd',3,4) == 'cd'"); vrfy(substr('abcd',1,3) == 'abc', "843: substr('abcd',1,3) == 'abc'"); vrfy(xor(17,17) == 0, '844: xor(17,17) == 0'); vrfy(xor(12,5) == 9, '845: xor(12,5) == 9'); vrfy(mmin(3,7) == 3, '846: mmin(3,7) == 3'); vrfy(mmin(4,7) == -3, '847: mmin(4,7) == -3'); vrfy(digit(123,2) == 1, '848: digit(123,2) == 1'); vrfy(ismult(3/4, 1/7) == 0, '849: ismult(3/4, 1/7) == 0'); vrfy(gcd(3/4, 1/7) == 1/28, '850: gcd(3/4,1/7) == 1/28'); vrfy(gcd(2,3,1/2) == 1/2, '851: gcd(2,3,1/2) == 1/2'); vrfy(gcd(17,7,1/7) == 1/7, '852: gcd(17,7,1/7) == 1/7'); vrfy(gcd(2) == 2, '853: gcd(2) == 2'); vrfy(gcd(-2) == 2, '854: gcd(-2) == 2'); vrfy(floor(1.5) == 1, '855: floor(1.5) == 1'); vrfy(floor(.5) == 0, '856: floor(.5) == 0'); vrfy(floor(-.5) == -1, '857: floor(-.5) == -1'); vrfy(floor(-1.5) == -2, '858: floor(-1.5) == -2'); vrfy(ceil(1.5) == 2, '859: ceil(1.5) == 2'); vrfy(ceil(.5) == 1, '860: ceil(.5) == 1'); vrfy(ceil(-.5) == 0, '861: ceil(-.5) == 0'); vrfy(ceil(-1.5) == -1, '862: ceil(-1.5) == -1'); vrfy(frac(-7.2) == -.2, '863: frac(-7.2) == -.2'); vrfy(gcd(4, 5, 1/3) == 1/3, '864: gcd(4, 5, 1/3) == 1/3'); vrfy(ltol(7/25) == 24/25, '865: ltol(7/25) == 24/25'); vrfy(hmean(1,2,3) == 18/11, '866: hmean(1,2,3) == 18/11'); vrfy(ilog2(2^-20) == -20, '867: ilog2(2^-20) == -20'); vrfy(ord("DBell") == 68, '868: ord("DBell") == 68'); vrfy(cmp("a","b") == -1, '869: cmp("a","b") == -1'); vrfy(cmp("abcd","abc") == 1, '870: cmp("abcd","abc") == 1'); vrfy(cmp(3,4i) == 1-1i, '871: cmp(3,4i) == 1-1i'); vrfy(cmp(4,4i) == 1-1i, '872: cmp(4,4i) == 1-1i'); vrfy(cmp(5,4i) == 1-1i, '873: cmp(5,4i) == 1-1i'); vrfy(cmp(-5,4i) == -1-1i, '874: cmp(-5,4i) == -1-1i'); vrfy(cmp(-4i,5) == -1-1i, '875: cmp(-4i,5) == -1-1i'); vrfy(cmp(-4i,-5) == 1-1i, '876: cmp(-4i,-5) == 1-1i'); vrfy(cmp(3i,4i) == -1i, '877: cmp(3i,4i) == -1i'); vrfy(cmp(4i,4i) == 0, '878: cmp(4i,4i) == 0'); vrfy(cmp(5i,4i) == 1i, '879: cmp(5i,4i) == 1i'); vrfy(cmp(3+4i,5) == -1+1i, '880: cmp(3+4i,5) == -1+1i'); vrfy(cmp(3+4i,-5) == 1+1i, '881: cmp(3+4i,-5) == 1+1i'); vrfy(cmp(3+4i,3+4i) == 0, '882: cmp(3+4i,3+4i) == 0'); vrfy(cmp(3+4i,3-4i) == 1i, '883: cmp(3+4i,3-4i) == 1i'); vrfy(cmp(3+4i,2+3i) == 1+1i, '884: cmp(3+4i,2+3i) == 1+1i'); vrfy(cmp(3+4i,-4-5i) == 1+1i, '885: cmp(3+4i,-4-5i) == 1+1i'); vrfy(comb(7,0) == 1, '886: comb(7,0) == 1'); vrfy(comb(0,0) == 1, '887: comb(0,0) == 1'); vrfy(perm(7,0) == 1, '888: perm(7,0) == 1'); vrfy(perm(0,0) == 1, '889: perm(0,0) == 1'); vrfy(isfile(files(0)) == 1, '890: isfile(files(0)) == 1'); vrfy(isfile(0) == 0, '891: isfile(0) == 0'); vrfy(ismult(4^67, 2^59) == 1, '892: ismult(4^67, 2^59) == 1'); vrfy(ismult(13, 4/67) == 0, '893: ismult(13, 4/67) == 0'); vrfy(ismult(13, 7/56) == 1, '894: ismult(13, 7/56) == 1'); vrfy(isnum(2i) == 1, '895: isnum(2i) == 1'); vrfy(iseven(1/3) == 0, '896: iseven(1/3) == 0'); vrfy(isodd(1/3) == 0, '897: isodd(1/3) == 0'); vrfy(isrel(-5, 6) == 1, '898: isrel(-5, 6) == 1'); vrfy(isrel(-2, 6) == 0, '899: isrel(-2, 6) == 0'); vrfy(bit(9,0) == 1, '900: bit(9,0) == 1'); vrfy(bit(9,1) == 0, '901: bit(9,1) == 0'); vrfy(bit(9,2) == 0, '902: bit(9,2) == 0'); vrfy(bit(9,3) == 1, '903: bit(9,3) == 1'); vrfy(bit(1.25, -2) == 1, '904: bit(1.25, -2) == 1'); vrfy(bit(1.25, -1) == 0, '905: bit(1.25, -1) == 0'); vrfy(bit(1.25, 0) == 1, '906: bit(1.25, 0) == 1'); vrfy(bit(pi(), 1) == 1, '907: bit(pi(), 1) == 1'); vrfy(bit(pi(), -2) == 0, '908: bit(pi(), -2) == 0'); vrfy(bit(pi(), -3) == 1, '909: bit(pi(), -3) == 1'); vrfy(istype(2, 3.0) == 1, '910: istype(2, 3.0) == 1'); vrfy(istype(2, "2") == 0, '911: istype(2, "2") == 0'); vrfy(istype(2, 3i) == 0, '912: istype(2, 3i) == 0'); vrfy(istype(2i+2, 3i) == 1, '913: istype(2i+2, 3i) == 1'); a = epsilon(); print '914: a = epsilon()'; vrfy(epsilon(a) == epsilon(), '915: epsilon(a) == epsilon()'); vrfy(epsilon(a) == epsilon(), '916: epsilon(a) == epsilon()'); vrfy(epsilon(a) == epsilon(), '917: epsilon(a) == epsilon()'); vrfy(epsilon() == a, '918: epsilon() == a'); b = 1e-6; print '919: b = 1e-6'; vrfy(epsilon(b) == a, '920: epsilon(b) == a'); vrfy(epsilon(b) == epsilon(), '921: epsilon(b) == epsilon()'); vrfy(epsilon(b) == epsilon(), '922: epsilon(b) == epsilon()'); vrfy(epsilon(b) == epsilon(), '923: epsilon(b) == epsilon()'); vrfy(epsilon() == 1e-6, '924: epsilon() == 1e-6'); vrfy(epsilon(a) == b, '925: epsilon(a) == b'); vrfy(epsilon(a) == epsilon(), '926: epsilon(a) == epsilon()'); vrfy(epsilon(a) == epsilon(), '927: epsilon(a) == epsilon()'); vrfy(epsilon(a) == epsilon(), '928: epsilon(a) == epsilon()'); vrfy(epsilon(a) == a, '929: epsilon(a) == a'); vrfy(quomod(13,5,a,b) == 1, '930: quomod(13,5,a,b) == 1'); vrfy(a == 2, '931: a == 2'); vrfy(b == 3, '932: b == 3'); vrfy(quomod(15.6,5.2,a,b) == 0, '933: quomod(15.6,5.2,a,b) == 0'); vrfy(a == 3, '934: a == 3'); vrfy(b == 0, '935: b == 0'); vrfy(putenv("abcd=efg") == 0, '936: putenv("abcd=efg")'); vrfy(getenv("abcd") == "efg", '937: getenv("abcd") == "efg"'); vrfy(putenv("abcd","123")==0, '938: putenv("abcd","123")'); vrfy(getenv("abcd") == "123", '939: getenv("abcd") == "123"'); vrfy(isnull(getenv("notavar")) == 1, '940: isnull(getenv("notavar")) == 1'); a = "abcdefg"; print '941: a = "abcdefg"'; vrfy(strpos(a, "c") == 3, '942: strpos(a, "c") == 3'); vrfy(strpos(a, "def") == 4, '943: strpos(a, "def") == 4'); vrfy(strpos(a, "defg") == 4, '944: strpos(a, "defg") == 4'); vrfy(strpos(a, "defgh") == 0, '945: strpos(a, "defgh") == 0'); vrfy(strpos(a, "abc") == 1, '946: strpos(a, "abc") == 1'); vrfy(strpos(a, "xyz") == 0, '947: strpos(a, "xyz") == 0'); vrfy(strpos(a, a) == 1, '948: strpos(a, a) == 1'); if (config("windows") || config("cygwin")) { print '949: test skipped for windows or cygwin systems'; print '950: test skipped for windows or cygwin systems'; } else { vrfy(system("") == 0, '949: system("") == 0'); vrfy(system("true") == 0, '950: system("true") == 0'); } print '951: test disabled due to stdin dependency'; print '952: test removed'; print '953: test removed'; vrfy(isstr(cmdbuf()) == 1, '954: isstr(cmdbuf()) == 1'); vrfy(abs(root(4,3,0.1)-1.5874) < 0.1, '955: abs(root(4,3,0.1)-1.5874) < 0.1'); print '956: a = 2^300 + 69962309754533779525365054067'; a = 2^300 + 69962309754533779525365054067; a /= 2^211; print '957: a /= 2^211'; vrfy(appr(a, 1e-20) == 2^89, '958: appr(a, 1e-20) == 2^89'); vrfy(digits(5e149) == 150, '959: digits(5e149) == 150'); vrfy(highbit(2) == 1, '960: highbit(2) == 1'); vrfy(highbit(3) == 1, '961: highbit(3) == 1'); vrfy(highbit(4) == 2, '962: highbit(4) == 2'); vrfy(highbit(-15) == 3, '963: highbit(-15) == 3'); vrfy(highbit(2^27) == 27, '964: highbit(2^27) == 27'); a = 12.34; print '965: a = 12.34'; vrfy(digit(a,2) == 0, '966: digit(a,2) == 0'); vrfy(digit(a,1) == 1, '967: digit(a,1) == 1'); vrfy(digit(a,0) == 2, '968: digit(a,0) == 2'); vrfy(digit(a,-1) == 3, '969: digit(a,-1) == 3'); vrfy(digit(a,-2) == 4, '970: digit(a,-2) == 4'); a = 10/7; print '971: a = 10/7'; vrfy(digit(a,1) == 0, '972: digit(a,1) == 0'); vrfy(digit(a,0) == 1, '973: digit(a,0) == 1'); vrfy(digit(a,-1) == 4, '974: digit(a,-1) == 4'); vrfy(digit(a,-2) == 2, '975: digit(a,-2) == 2'); vrfy(digit(a,-3) == 8, '976: digit(a,-3) == 8'); vrfy(digits(0) == 1, '977: digits(0) == 1'); vrfy(digits(0.0123) == 1, '978: digits(0.0123) == 1'); vrfy(digits(3.7) == 1, '979: digits(3.7) == 1'); vrfy(digits(-27) == 2, '980: digits(-27) == 2'); vrfy(digits(-99.7) == 2, '981: digits(-99.7) == 2'); vrfy(ilog2(1) == 0, '982: ilog2(1) == 0'); vrfy(ilog2(2) == 1, '983: ilog2(2) == 1'); vrfy(ilog2(3) == 1, '984: ilog2(3) == 1'); vrfy(ilog2(4) == 2, '985: ilog2(4) == 2'); vrfy(ilog2(1/15) == -4, '986: ilog2(1/15) == -4'); vrfy(places(3) == 0, '987: places(3) == 0'); vrfy(places(0.0123) == 4, '988: places(0.0123) == 4'); vrfy(places(3.70) == 1, '989: places(3.70) == 1'); vrfy(places(1e-10) == 10, '990: places(1e-10) == 10'); vrfy(places(3/7) == -1, '991: places(/37) == -1'); vrfy(ilog10(7.7) == 0, '992: ilog10(7.7) == 0'); vrfy(ilog10(77.7) == 1, '993: ilog10(77.7) == 1'); vrfy(ilog10(777) == 2, '994: ilog10(777) == 2'); vrfy(ilog10(.00777) == -3, '995: ilog10(.00777) == -3'); vrfy(ilog10(1e27) == 27, '996: ilog10(1e27) == 27'); vrfy(lowbit(2) == 1, '997: lowbit(2) == 1'); vrfy(lowbit(3) == 0, '998: lowbit(3) == 0'); vrfy(lowbit(4) == 2, '999: lowbit(4) == 2'); vrfy(lowbit(-15) == 0, '1000: lowbit(-15) == 0'); vrfy(lowbit(2^27) == 27, '1001: lowbit(2^27) == 27'); vrfy(char(0102) == 'B', '1002: char(0102) == \'B\''); vrfy(char(0x6f) == 'o', '1003: char(0x6f) == \'o\''); vrfy(char(119) == 'w', '1004: char(119) == \'w\''); vrfy(char(0145) == 'e', '1005: char(0145) == \'e\''); vrfy(char(0x6e) == 'n', '1006: char(0x6e) == \'n\''); vrfy(den(-1.25) == 4, '1007: den(-1.25) == 4'); vrfy(den(121/33) == 3, '1008: den(121/33) == 3'); vrfy(gcd(9/10, 11/5, 4/25) == 0.02, '1009: gcd(9/10, 11/5, 4/25) == 0.02'); vrfy(gcd(0,0,0,0,0) == 0, '1010: gcd(0,0,0,0,0) == 0'); vrfy(hypot(3, 4, 1e-6) == 5, '1011: hypot(3, 4, 1e-6) == 5'); vrfy(hypot(2,-3,1e-6) == 3605551/1e6, '1012: hypot(2,-3,1e-6) == 3605551/1e6'); vrfy(im(-4.25 - 7i) == -7, '1013: im(-4.25 - 7i) == -7'); vrfy(lcm(12, -24, 30) == -120,'1014: lcm(12, -24, 30) == -120'); vrfy(lcm(9/10, 11/5, 4/25) == 79.2, '1015: lcm(9/10, 11/5, 4/25) == 79.2'); vrfy(lcm(2) == 2, '1016: lcm(2) == 2'); vrfy(max(2) == 2, '1017: max(2) == 2'); vrfy(min(2) == 2, '1018: min(2) == 2'); vrfy(re(-4.25 - 7i) == -4.25, '1019: re(-4.25 - 7i) == -4.25'); vrfy(size("abc") == 3, '1020: size("abc") == 3'); vrfy(str("") == "", '1021: str("") == ""'); vrfy(str(null()) == "", '1022: str(null()) == ""'); vrfy(str("Ernest Bowen") == "Ernest Bowen", '1023: str("Ernest Bowen") == "Ernest Bowen"'); vrfy(strlen("a b\tc\\d") == 7, '1024: strlen("a b\tc\\d") == 7'); vrfy(xor(2) == 2, '1025: xor(2) == 2'); vrfy(xor(5, 3, 7, 2, 9) == 10, '1026: xor(5, 3, 7, 2, 9) == 10'); vrfy(xor(0,0) == 0, '1027: xor(0,0) == 0'); vrfy(xor(0,1) == 1, '1028: xor(0,1) == 1'); vrfy(xor(1,0) == 1, '1029: xor(1,0) == 1'); vrfy(xor(1,1) == 0, '1030: xor(1,1) == 0'); vrfy(xor(5,3,-7,2,9) == -12, '1031: xor(5,3,-7,2,9) == -12'); vrfy(fib(-2) == -1, '1032: fib(-2) == -1'); vrfy(fib(-1) == 1, '1033: fib(-1) == 1'); vrfy(fib(-10) == -55, '1034: fib(-10) == -55'); vrfy(ilog(1/8, 3) == -2, '1035: ilog(1/8, 3) == -2'); vrfy(ilog(8.9, 3) == 1, '1036: ilog(8.9, 3) == 1'); vrfy(iroot(1,9) == 1, '1037: iroot(1,9) == 1'); vrfy(iroot(pi()^8,5) == 6, '1038: iroot(pi()^8,5)'); vrfy(isqrt(8.5) == 2, '1039: isqrt(8.5) == 2'); vrfy(isqrt(2e56) == 14142135623730950488016887242, '1040: isqrt(2e56) == 14142135623730950488016887242'); vrfy(near(22/7, 3.15, .01) == -1, '1041: near(22/7, 3.15, .01) == -1'); vrfy(near(22/7, 3.15, .005) == 1, '1042: near(22/7, 3.15, .005) == 1'); vrfy(norm(3.4) == 11.56, '1043: isqrt(3.4) == 11.56'); vrfy(pi(1e-5) == 3.14159, '1044: pi(1e-5) == 3.14159'); pi = pi(1e-10); print '1045: pi = pi(1e-10)'; vrfy(pi == 3.1415926536, '1046: pi == 3.1415926536'); vrfy(polar(2,pi/2,1e-5)==2i, '1047: polar(2,pi/2,1e-5)==2i'); vrfy(power(exp(1,1e-20),pi(1e-20)*1i/2,1e-20) == 1i, '1048: power(exp(1,1e-20),pi(1e-20)*1i/2,1e-20) == 1i'); vrfy(ssq(1+2i, 3-4i, 5 +6i) == -21+40i, '1049: ssq(1+2i, 3-4i, 5 +6i) == -21+40i'); vrfy(isreal(ln(1 + 1e-10i, 1e-5)), '1050: isreal(ln(1 + 1e-10i, 1e-5))'); vrfy(isreal(exp(pi(1e-10)*1i, 1e-5)), '1051: isreal(exp(pi(1e-10)*1i, 1e-5))'); vrfy(cfappr(43/30, 10, 0) == 10/7, '1052: cfappr(43/30, 10, 0) == 10/7'); vrfy(cfappr(43/30, 10, 1) == 13/9, '1053: cfappr(43/30, 10, 1) == 13/9'); vrfy(cfappr(43/30, 10, 16) == 10/7, '1054: cfappr(43/30, 10, 16) == 10/7'); vrfy(cfappr(6/5, 1/2, 16) == 1, '1055: cfappr(6/5, 1/2, 16) == 1'); vrfy(cfsim(13,8) == 0, '1056: cfsim(13,8) == 0'); vrfy(cfsim(1057,8) == 0, '1057: cfsim(1057,8) == 0'); vrfy(mod(11,5,0) == 1, '1058: mod(11,5,0) == 1'); vrfy(mod(11,5,1) == -4, '1059: mod(11,5,1) == -4'); vrfy(mod(-11,5,2) == -1, '1060: mod(-11,5,2) == -1'); vrfy(mod(-11,-5,3) == 4, '1061: mod(-11,-5,3) == 4'); vrfy(mod(12.5,5,16) == 2.5, '1062: mod(12.5,5,16) == 2.5'); vrfy(mod(12.5,5,17) == -2.5, '1063: mod(12.5,5,17) == -2.5'); vrfy(mod(12.5,5,24) == 2.5, '1064: mod(12.5,5,24) == 2.5'); vrfy(mod(-7.5,-5,24) == 2.5, '1065: mod(-7.5,-5,24) == 2.5'); vrfy(quo(11,5,0) == 2, '1066: quo(11,5,0) == 2'); vrfy(quo(11,5,1) == 3, '1067: quo(11,5,1) == 3'); vrfy(quo(-11,5,2) == -2, '1068: quo(-11,5,2) == -2'); vrfy(quo(-11,-5,3) == 3, '1069: quo(-11,-5,3) == 3'); vrfy(quo(12.5,5,16) == 2, '1070: quo(12.5,5,16) == 2'); vrfy(quo(12.5,5,17) == 3, '1071: quo(12.5,5,17) == 3'); vrfy(quo(12.5,5,24) == 2, '1072: quo(12.5,5,24) == 2'); vrfy(quo(-7.5,-5,24) == 2, '1073: quo(-7.5,-5,24) == 2'); vrfy(frac(2.5 + 3i) == .5, '1074: frac(2.5 + 3i) == .5'); vrfy(root(1i,1000,1e-2)==1, '1075: root(1i,1000,1e-2) == 1'); vrfy(scale(2+3i,2)==8+12i, '1076: scale(2+3i,2) == 8+12i'); vrfy(frem(8,4) == 2, '1077: frem(8,4) == 2'); vrfy(jacobi(80,199) == 1, '1078: jacobi(80,199) == 1'); vrfy(test(1), '1079: test(1)'); vrfy(!test(0), '1080: !test(0)'); vrfy(hnrmod(2^177-1,1,177,-1)==0, '1081: hnrmod(2^177-1,1,177,-1)==0'); vrfy(hnrmod(2^178-2,1,177,-1)==0, '1082: hnrmod(2^178-2,1,177,-1)==0'); vrfy(hnrmod(2^178-3,1,177,1)==2^177-4, '1083: hnrmod(2^178-3,1,177,1)==2^177-4'); vrfy(hnrmod(2^179-4,1,177,0)==2^177-4, '1084: hnrmod(2^179-4,1,177,0)==2^177-4'); vrfy(hnrmod(1234567^2,13,17,-1)==1155404, '1085: hnrmod(1234567^2,13,17,-1)==1155404'); vrfy(hnrmod(3276^54,45,415,1)==3276^54%(45*2^415+1), '1086: hnrmod(3276^54,45,415,1)==3276^54%(45*2^415+1)'); vrfy(hnrmod(3276^54,45,415,0)==3276^54%(45*2^415), '1087: hnrmod(3276^54,45,415,0)==3276^54%(45*2^415)'); vrfy(hnrmod(3276^54,45,415,-1)==3276^54%(45*2^415-1), '1088: hnrmod(3276^54,45,415,-1)==3276^54%(45*2^415-1)'); vrfy(hnrmod(10^40, 17, 51, 1) == 33827019788296445, '1089: hnrmod(10^40, 17, 51, 1) == 33827019788296445'); vrfy(hnrmod(3192487935759423423521,16,65,1)==241008883965895164956, '1090: hnrmod(3192487935759423423521,16,65,1)==241008883965895164956'); /* * minv bug fix */ a = 2868611690182699929873981931; print '1091: a = 2868611690182699929873981931'; b = 502922899875329926125584830; print '1092: b = 502922899875329926125584830'; vrfy(minv(b,a) == 1111092570983877189739032190, '1093: minv(b,a) == 1111092570983877189739032190'); vrfy(mod(minv(b,a)*b,a) == 1, '1094: mod(minv(b,a)*b,a) == 1'); /* * more functions to test */ vrfy(popcnt(32767) == 15, '1095: popcnt(32767) == 15'); vrfy(popcnt(3/2) == 3, '1096: popcnt(3/2) == 3'); vrfy(popcnt(-237/39929,1) == 17, '1097: popcnt(-237/39929,1) == 17'); vrfy(popcnt(-237/39929,0) == 7, '1098: popcnt(-237/39929,0) == 7'); vrfy(popcnt(-237/39929) == 17, '1099: popcnt(-237/39929) == 17'); vrfy(popcnt(pi(1e-20)) == 65, '1100: popcnt(pi(1e-20)) == 65'); vrfy(popcnt(pi(1e-20),0) == 69, '1101: popcnt(pi(1e-20),0) == 69'); vrfy(popcnt(17^777) == 1593, '1102: popcnt(17^777) == 1593'); /* * more hnrmod testing */ vrfy(hnrmod(21<<100+5,3,100,1) == (21<<100+5)%(3<<100+1), '1103: hnrmod(21<<100+5,3,100,1) == (21<<100+5)%(3<<100+1)'); vrfy(hnrmod(21<<500+7,3,500,1) == (21<<500+7)%(3<<500+1), '1104: hnrmod(21<<500+7,3,500,1) == (21<<500+7)%(3<<500+1)'); vrfy(hnrmod(-767256,84,1,0) == (-767256)%(84<<1+0), '1105: hnrmod(-767256,84,1,0) == (-767256)%(84<<1+0)'); vrfy(hnrmod(-831150,75,1,0) == (-831150)%(75<<1+0), '1106: hnrmod(-831150,75,1,0) == (-831150)%(75<<1+0)'); vrfy(hnrmod(-767256,84,1,1) == (-767256)%(84<<1+1), '1107: hnrmod(-767256,84,1,1) == (-767256)%(84<<1+1)'); vrfy(hnrmod(-831150,75,1,1) == (-831150)%(75<<1+1), '1108: hnrmod(-831150,75,1,1) == (-831150)%(75<<1+1)'); vrfy(hnrmod(-767256,84,1,-1) == (-767256)%(84<<1-1), '1109: hnrmod(-767256,84,1,-1) == (-767256)%(84<<1-1)'); vrfy(hnrmod(-831150,75,1,-1) == (-831150)%(75<<1-1), '1110: hnrmod(-831150,75,1,-1) == (-831150)%(75<<1-1)'); vrfy(hnrmod(21<<100+5,3,100,0) == (21<<100+5)%(3<<100+0), '1111: hnrmod(21<<100+5,3,100,0) == (21<<100+5)%(3<<100+0)'); vrfy(hnrmod(21<<500+7,3,500,-1) == (21<<500+7)%(3<<500-1), '1112: hnrmod(21<<500+7,3,500,-1) == (21<<500+7)%(3<<500-1)'); /* * catalan testing */ vrfy(catalan(2) == 2, '1113: catalan(2) == 2'); vrfy(catalan(3) == 5, '1114: catalan(3) == 5'); vrfy(catalan(4) == 14, '1115: catalan(4) == 14'); vrfy(catalan(20) == 6564120420, '1116: catalan(20) == 6564120420'); /* * bernoulli builtin function testing */ vrfy(bernoulli(0) == 1, '1117: bernoulli(0) == 1'); vrfy(bernoulli(1) == -1/2, '1118: bernoulli(1) == -1/2'); vrfy(bernoulli(2) == 1/6, '1119: bernoulli(2) == 1/6'); vrfy(bernoulli(3) == 0, '1120: bernoulli(3) == 0'); vrfy(bernoulli(4) == -1/30, '1121: bernoulli(4) == -1/30'); vrfy(bernoulli(5) == 0, '1122: bernoulli(5) == 0'); vrfy(bernoulli(6) == 1/42, '1123: bernoulli(6) == 1/42'); vrfy(bernoulli(32) == -7709321041217/510, '1124: bernoulli(32) == -7709321041217/510'); /* * euler function testing */ vrfy(euler(0) == 1, '1125: euler(0) == 1'); vrfy(euler(1) == 0, '1126: euler(1) == 0'); vrfy(euler(2) == -1, '1127: euler(2) == -1'); vrfy(euler(3) == 0, '1128: euler(3) == 0'); vrfy(freeeuler() == null(), '1129: freeeuler() == null()'); vrfy(euler(4) == 5, '1130: euler(4) == 5'); vrfy(euler(5) == 0, '1131: euler(5) == 0'); vrfy(euler(6) == -61, '1132: euler(6) == -61'); vrfy(euler(32) == 177519391579539289436664789665, '1130: euler(32) == 177519391579539289436664789665'); vrfy(freeeuler() == null(), '1133: freeeuler() == null()'); /* * digit with non-10 base */ a = 123456.789; print '1134: a = 123456.789'; vrfy(digit(a, 6, 100) == 0, '1135: digit(a, 6, 100) == 0'); vrfy(digit(a, 5, 100) == 0, '1136: digit(a, 5, 100) == 0'); vrfy(digit(a, 4, 100) == 0, '1137: digit(a, 4, 100) == 0'); vrfy(digit(a, 3, 100) == 0, '1138: digit(a, 3, 100) == 0'); vrfy(digit(a, 2, 100) == 12, '1139: digit(a, 2, 100) == 12'); vrfy(digit(a, 1, 100) == 34, '1140: digit(a, 1, 100) == 34'); vrfy(digit(a, 0, 100) == 56, '1141: digit(a, 0, 100) == 56'); vrfy(digit(a, -1, 100) == 78, '1142: digit(a, -1, 100) == 78'); vrfy(digit(a, -2, 100) == 90, '1143: digit(a, -2, 100) == 90'); vrfy(digit(a, -3, 100) == 0, '1144: digit(a, -3, 100) == 0'); vrfy(digit(a, -4, 100) == 0, '1145: digit(a, -4, 100) == 0'); vrfy(digit(a, -5, 100) == 0, '1146: digit(a, -5, 100) == 0'); vrfy(digit(a, -6, 100) == 0, '1146: digit(a, -6, 100) == 0'); /* * digits with a non-10 base */ vrfy(digits(a, 100) == 3, '1147: digits(a, 100) == 3'); vrfy(digits(2^256-1, 256) == 32,'1148: digits(2^256-1, 256) == 32'); /* * places with a non-10 base */ vrfy(places(0.0123, 2) == -1, '1149: places(0.0123, 2) == -1'); vrfy(places(0.625, 2) == 3, '1150: places(0.625, 2) == 3'); vrfy(places(0.625, 8) == 1, '1151: places(0.625, 8) == 1'); vrfy(places(171/2^712, 2) == 712, '1152: places(171/2^7120.625, 2) == 712'); vrfy(places(171/2^712, 64) == 119, '1152: places(171/2^7120.625, 64) == 119'); /* * verify sleep */ vrfy(sleep(1/5) == null(), '1153: sleep(1/5) == null()'); vrfy(sleep(1/100) == null(), '1154: sleep(1/100) == null()'); /* * verify calcpath */ vrfy(isstr(calcpath()), '1155: isstr(calcpath())'); /* * ssq use of lists */ vrfy(ssq(1,2, list(3,4,list(5,6)), list(), 7, 8) == 204, '1156: ssq(1,2, list(3,4,list(5,6)), list(), 7, 8) == 204'); /* * quomod 5th argument rounding tests */ vrfy(quomod(10,-3,a,b,0) == 1, '1157: vrfy(quomod(10,-3,a,b,0) == 1'); vrfy(a == -4, '1158: a == -4'); vrfy(b == -2, '1159: b == -2'); vrfy(quomod(-10,-3,a,b,1) == 1, '1160: vrfy(quomod(-10,-3,a,b,1) == 1'); vrfy(a == 4, '1161: a == 4'); vrfy(b == 2, '1162: b == 2'); vrfy(quomod(10,3,a,b,2) == 1, '1163: vrfy(quomod(10,3,a,b,2) == 1'); vrfy(a == 3, '1164: a == 3'); vrfy(b == 1, '1165: b == 1'); vrfy(quomod(-10,3,a,b,3) == 1, '1166: vrfy(quomod(-10,3,a,b,3) == 1'); vrfy(a == -4, '1167: a == -4'); vrfy(b == 2, '1168: b == 2'); vrfy(quomod(10,-3,a,b,4) == 1, '1169: vrfy(quomod(10,-3,a,b,4) == 1'); vrfy(a == -3, '1170: a == -3'); vrfy(b == 1, '1171: b == 1'); vrfy(quomod(-10,-3,a,b,5) == 1, '1172: vrfy(quomod(-10,-3,a,b,5) == 1'); vrfy(a == 3, '1173: a == 3'); vrfy(b == -1, '1174: b == -1'); vrfy(quomod(10,3,a,b,6) == 1, '1175: vrfy(quomod(10,3,a,b,6) == 1'); vrfy(a == 3, '1176: a == 3'); vrfy(b == 1, '1177: b == 1'); vrfy(quomod(-10,3,a,b,7) == 1, '1178: vrfy(quomod(-10,3,a,b,7) == 1'); vrfy(a == -4, '1179: a == -4'); vrfy(b == 2, '1180: b == 2'); vrfy(quomod(10,-3,a,b,8) == 1, '1181: vrfy(quomod(10,-3,a,b,8) == 1'); vrfy(a == -4, '1182: a == -4'); vrfy(b == -2, '1183: b == -2'); vrfy(quomod(-10,-3,a,b,9) == 1, '1184: vrfy(quomod(-10,-3,a,b,9) == 1'); vrfy(a == 3, '1185: a == 3'); vrfy(b == -1, '1186: b == -1'); vrfy(quomod(10,3,a,b,10) == 1, '1187: vrfy(quomod(10,3,a,b,10) == 1'); vrfy(a == 4, '1188: a == 4'); vrfy(b == -2, '1189: b == -2'); vrfy(quomod(-10,3,a,b,11) == 1, '1190: vrfy(quomod(-10,3,a,b,11) == 1'); vrfy(a == -4, '1191: a == -4'); vrfy(b == 2, '1192: b == 2'); vrfy(quomod(10,-3,a,b,12) == 1, '1193: vrfy(quomod(10,-3,a,b,12) == 1'); vrfy(a == -3, '1194: a == -3'); vrfy(b == 1, '1195: b == 1'); vrfy(quomod(-10,-3,a,b,13) == 1,'1196: vrfy(quomod(-10,-3,a,b,13) == 1'); vrfy(a == 4, '1197: a == 4'); vrfy(b == 2, '1198: b == 2'); vrfy(quomod(10,3,a,b,14) == 1, '1199: vrfy(quomod(10,3,a,b,14) == 1'); vrfy(a == 4, '1200: a == 4'); vrfy(b == -2, '1201: b == -2'); vrfy(quomod(-10,3,a,b,15) == 1, '1202: vrfy(quomod(-10,3,a,b,15) == 1'); vrfy(a == -4, '1203: a == -4'); vrfy(b == 2, '1204: b == 2'); /* runtime(), systime(), usertime() return numeric values */ vrfy(isnum(runtime()), '1205: isnum(runtime())'); vrfy(isnum(systime()), '1206: isnum(systime())'); vrfy(isnum(usertime()), '1207: isnum(usertime())'); /* more jacobi tests */ vrfy(jacobi(987897,987) == 0, '1208: jacobi(987897,987) == 0'); vrfy(jacobi(897,987) == 0, '1209: jacobi(897,987) == 0'); vrfy(jacobi(987,897) == 0, '1210: jacobi(987,897) == 0'); vrfy(jacobi(90,897) == 0, '1211: jacobi(90,897) == 0'); vrfy(jacobi(45,897) == 0, '1212: jacobi(45,897) == 0'); vrfy(jacobi(897,45) == 0, '1213: jacobi(897,45) == 0'); vrfy(jacobi(42,45) == 0, '1214: jacobi(42,45) == 0'); vrfy(jacobi(21,45) == 0, '1215: jacobi(21,45) == 0'); vrfy(jacobi(45,21) == 0, '1216: jacobi(45,21) == 0'); vrfy(jacobi(3,21) == 0, '1217: jacobi(3,21) == 0'); vrfy(jacobi(0,21) == 0, '1218: jacobi(0,21) == 0'); vrfy(jacobi(0,20003) == 0, '1219: jacobi(0,20003) == 0'); vrfy(jacobi(1,20003) == 1, '1220: jacobi(1,20003) == 1'); vrfy(jacobi(1236,20003) == 1, '1221: jacobi(1236,20003) == 1'); vrfy(jacobi(618,20003) == -1, '1222: jacobi(618,20003) == -1'); vrfy(jacobi(309,20003) == 1, '1223: jacobi(309,20003) == 1'); vrfy(jacobi(227,309) == 1, '1224: jacobi(227,309) == 1'); vrfy(jacobi(82,227) == 1, '1225: jacobi(82,227) == 1'); vrfy(jacobi(41,227) == -1, '1226: jacobi(41,227) == -1'); vrfy(jacobi(22,41) == -1, '1227: jacobi(22,41) == -1'); vrfy(jacobi(11,41) == -1, '1228: jacobi(11,41) == -1'); vrfy(jacobi(8,11) == -1, '1229: jacobi(8,11) == -1'); vrfy(jacobi(4,11) == 1, '1230: jacobi(4,11) == 1'); vrfy(jacobi(2,11) == -1, '1231: jacobi(2,11) == -1'); vrfy(jacobi(1,11) == 1, '1232: jacobi(1,11) == 1'); vrfy(jacobi(0,11) == 0, '1233: jacobi(0,11) == 0'); vrfy(jacobi(0,0) == 0, '1234: jacobi(0,0) == 0'); vrfy(jacobi(-1,0) == 0, '1235: jacobi(-1,0) == 0'); vrfy(jacobi(-1,-1) == 0, '1236: jacobi(-1,-1) == 0'); vrfy(jacobi(0,-1) == 0, '1237: jacobi(0,-1) == 0'); print '1238: Ending test_functions'; } print '017: parsed test_functions()'; /* * _test_underscore - test use of _'s in identifiers */ _ = 49; print '018: _ = 49'; __ = 63; print "019: __ = 63"; define _test_underscore() { local _a = 27; local __a = 23209; print "1290: Beginning _test_underscore"; vrfy(_a == 27, '1291: _a == 27'); vrfy(_ == 49, '1292: _ == 49'); vrfy(__ == 63, '1293: __ == 63'); vrfy(__a == 23209, '1294: __a == 23209'); print "1295: Ending _test_underscore"; } print '020: parsed _test_underscore'; /* * place holder for any print items */ print "021:", "reserved for future use"; print "022:": " reserved for future use"; /* * Test associations */ define test_assoc() { static a; static b; local A; print '1300: Beginning associations test'; a = assoc(); vrfy(size(a) == 0, '1301: size(a) == 0'); a["curds"] = 13; print '1302: a["curds"] = 13'; vrfy(a["curds"] == 13, '1303: a["curds"] == 13'); a[13] = 17; print '1304: a[13] = 17'; vrfy(a[13] == 17, '1305: a[13] == 17'); vrfy(a[a["curds"]] == 17, '1306: a[a["curds"]] == 17'); a[17] = 19; print '1307: a[17] = 19'; vrfy(a[17] == 19, '1308: a[17] == 19'); vrfy(a[a["curds"]+4] == 19, '1309: a[a["curds"]+4] == 19'); vrfy(size(a) == 3, '1310: size(a) == 3'); vrfy(a[[search(a,17)]] == 17, '1311: (a[[search(a,17)]] == 17'); vrfy(isnull(search(a,16)), '1312: isnull(search(a,16))'); a["curds","whey"] = "spider"; print '1313: a["curds","whey"] = "spider"'; vrfy(a["curds","whey"] == "spider", '1314: a["curds","whey"] == "spider"'); vrfy(a[[rsearch(a,"spider")]] == "spider", '1315: a[[rsearch(a,"spider")]] == "spider"'); b = a; print '1316: b = a'; vrfy(b[17] == 19, '1317: b[17] == 19'); vrfy(a == b, '1318: a == b'); vrfy(isassoc(a) == 1, '1319: isassoc(a) == 1'); vrfy(isassoc(1) == 0, '1320: isassoc(1) == 0'); A = assoc(); vrfy(quomod(13, 5, A[1], A[2]) == 1, '1321: quomod(13, 5, A[1], A[2]) == 1'); vrfy(A[1] == 2, '1322: A[1] == 2'); vrfy(A[2] == 3, '1323: A[2] == 3'); print '1324: Ending associations test'; } print '023: parsed test_assoc()'; /* * Test lists */ define test_list() { static a; static b; static x = list(11,13,17,23,29); static y0 = list(1,3,7,3,9); static y1 = list(-9,-7,-3,-7,-1); static y2 = list(-9,-7,-3,3,9); static y3 = list(1,3,7,-7,-1); static y4 = list(1,3,-3,3,-1); local A,B,C,D,E; local y,z; local list1, list2; print '1400: Beginning list test'; a = list(2,3,5); vrfy(a == list(2,3,5), '1401: a == list(2,3,5)'); vrfy(a[[0]] == 2, '1402: a[[0]] == 2'); vrfy(a[[1]] == 3, '1403: a[[1]] == 3'); vrfy(a[[2]] == 5, '1404: a[[2]] == 5'); vrfy(size(a) == 3, '1405: size(a) == 3'); vrfy(search(a,3) == 1, '1406: search(a,3) == 1'); vrfy(isnull(search(a,3,2)), '1407: isnull(search(a,3,2))'); vrfy(rsearch(a,3,2) == 1, '1408: rsearch(a,3,2) == 1'); push(a,7); print '1409: push(a,7)'; vrfy(search(a,7) == 0, '1410: search(a,7) == 0'); vrfy(pop(a) == 7, '1411: pop(a) == 7'); vrfy(size(a) == 3, '1412: size(a) == 3'); append(a,7); print '1413: append(a,7)'; vrfy(search(a,7) == 3, '1414: search(a,7) == 3'); vrfy(size(a) == 4, '1415: size(a) == 4'); vrfy(remove(a) == 7, '1416: remove(a) == 7'); vrfy(size(a) == 3, '1417: size(a) == 3'); b = a; print '1418: b = a'; insert(a,1,7); print '1419: insert(a,1,7)'; vrfy(search(a,2) == 0, '1420: search(a,2) == 0'); vrfy(search(a,7) == 1, '1421: search(a,7) == 1'); vrfy(search(a,3) == 2, '1422: search(a,3) == 2'); vrfy(search(a,5) == 3, '1423: search(a,5) == 3'); vrfy(size(a) == 4, '1424: size(a) == 4'); vrfy(delete(a,1) == 7, '1425: remove(a) == 7'); vrfy(search(a,2) == 0, '1426: search(a,2) == 0'); vrfy(search(a,3) == 1, '1427: search(a,3) == 1'); vrfy(search(a,5) == 2, '1428: search(a,5) == 2'); vrfy(size(a) == 3, '1429: size(a) == 3'); vrfy(a == b, '1430: a == b'); A = list(1,2,3); print '1431: A = list(1,2,3)'; B = list(4,5); print '1432: B = list(4,5)'; C = join(A,B); print '1433: C = join(A,B)'; D = list(1,2,3,4,5); print '1434: D = list(1,2,3,4,5)'; vrfy(C == D, '1435: C == D'); E = list(5,4,3,2,1); print '1436: E = list(5,4,3,2,1)'; vrfy(reverse(D) == E, '1437: reverse(D) == E'); vrfy(sort(list(1,3,5,2,4))==D,'1438: sort(list(1,3,5,2,4))==D'); vrfy(head(D,2) == list(1,2), '1439: head(D,2) == list(1,2)'); vrfy(head(D,-2) == list(2,1), '1440: head(D,-2) == list(2,1)'); vrfy(head(D,5) == D, '1441: head(D,5) == D'); vrfy(head(D,6) == D, '1442: head(D,6) == D'); vrfy(head(D,-5) == E, '1443: head(D,-5) == E'); vrfy(head(D,-6) == E, '1444: head(D,-6) == E'); vrfy(tail(E,2) == list(2,1), '1445: tail(E,2) == list(2,1)'); vrfy(tail(E,-2) == list(1,2), '1446: tail(E,-2) == list(1,2)'); vrfy(tail(E,5) == E, '1447: tail(E,5) == E'); vrfy(tail(E,6) == E, '1448: tail(E,6) == E'); vrfy(tail(E,-5) == D, '1449: tail(E,-5) == D'); vrfy(tail(E,-6) == D, '1450: tail(E,-6) == D'); vrfy(segment(D,1,3) == list(2,3,4), '1451: segment(D,1,3) == list(2,3,4)'); vrfy(segment(D,3,1) == list(4,3,2), '1452: segment(D,3,1) == list(4,3,2)'); vrfy(segment(D,0,2) == head(D,3), '1453: segment(D,0,2) == head(D,3)'); vrfy(segment(D,2,0) == tail(E,3), '1454: segment(D,2,0) == tail(E,3)'); vrfy(segment(D,0,4) == head(D,5), '1455: segment(D,0,4) == head(D,5)'); vrfy(segment(D,4,0) == head(E,5), '1456: segment(D,4,0) == head(E,5)'); vrfy(segment(D,3,4) == tail(D,2), '1457: segment(D,3,4) == tail(D,2)'); vrfy(segment(D,4,3) == head(E,2), '1458: segment(D,4,3) == head(E,2)'); for (y=0; y < size(D); ++y) { for (z=y; z < size(D); ++z) { if (D != join(head(D,y), segment(D,y,z), tail(D,size(D)-z-1))) { prob(strcat("join loop failed at y=",str(y)," z=",str(z))); } } } print '1459: join loop test'; vrfy(mod(x,10,0) == y0, '1460: mod(x,10,0) == y0'); vrfy(mod(x,10,1) == y1, '1461: mod(x,10,1) == y1'); vrfy(mod(x,10,2) == y0, '1462: mod(x,10,2) == y0'); vrfy(mod(x,10,3) == y1, '1463: mod(x,10,3) == y1'); vrfy(mod(x,10,4) == y0, '1464: mod(x,10,4) == y0'); vrfy(mod(x,10,5) == y1, '1465: mod(x,10,5) == y1'); vrfy(mod(x,10,6) == y0, '1466: mod(x,10,6) == y0'); vrfy(mod(x,10,7) == y1, '1467: mod(x,10,7) == y1'); vrfy(mod(x,10,8) == y2, '1468: mod(x,10,8) == y2'); vrfy(mod(x,10,9) == y3, '1469: mod(x,10,9) == y3'); vrfy(mod(x,10,10) == y2, '1470: mod(x,10,10) == y2'); vrfy(mod(x,10,11) == y3, '1471: mod(x,10,11) == y3'); vrfy(mod(x,10,12) == y2, '1472: mod(x,10,12) == y2'); vrfy(mod(x,10,13) == y3, '1473: mod(x,10,13) == y3'); vrfy(mod(x,10,14) == y2, '1474: mod(x,10,14) == y2'); vrfy(mod(x,10,15) == y3, '1475: mod(x,10,15) == y3'); vrfy(mod(x,10,16) == y4, '1476: mod(x,10,16) == y4'); vrfy(mod(x,10,16) == y4, '1477: mod(x,10,16) == y4'); vrfy(mod(x,10,18) == y4, '1478: mod(x,10,18) == y4'); vrfy(mod(x,10,19) == y4, '1479: mod(x,10,18) == y4'); vrfy(mod(x,10,20) == y4, '1480: mod(x,10,20) == y4'); vrfy(mod(x,10,21) == y4, '1481: mod(x,10,21) == y4'); vrfy(mod(x,10,22) == y4, '1482: mod(x,10,22) == y4'); vrfy(mod(x,10,23) == y4, '1483: mod(x,10,23) == y4'); vrfy(mod(x,10,24) == y4, '1484: mod(x,10,24) == y4'); vrfy(mod(x,10,25) == y4, '1485: mod(x,10,25) == y4'); vrfy(mod(x,10,26) == y4, '1486: mod(x,10,26) == y4'); vrfy(mod(x,10,27) == y4, '1487: mod(x,10,27) == y4'); vrfy(mod(x,10,28) == y4, '1488: mod(x,10,28) == y4'); vrfy(mod(x,10,29) == y4, '1489: mod(x,10,29) == y4'); vrfy(mod(x,10,30) == y4, '1490: mod(x,10,30) == y4'); vrfy(mod(x,10,31) == y4, '1491: mod(x,10,31) == y4'); list1 = list(3,1,"x",2,null()); print '1492: list1 = list(3,1,"x",2,null())'; list2 = list(null(),1,2,3,"x"); print '1493: list2 = list(null(),1,2,3,"x")'; vrfy(sort(list1) == list2, '1494: sort(list1) == list2'); A = list(1,2,3,4); print '1495: A = list(1,2,3,4)'; B = makelist(4) = {1,2,3,4}; print '1496: B = makelist(4) = {1,2,3,4}'; vrfy(A == B, '1497: A == B'); vrfy((A = {,,5}) == list(1,2,5,4), '1498: (A = {,,5}) == list(1,2,5,4)'); print '1499: Ending list test'; } print '024: parsed test_list()'; /* * Test rand - a55 shuffle pseudo-random number generator */ define test_rand() { local init; /* initial generator state */ local state0; /* a generator state */ local tmp; local n; print '1500: Beginning rand test'; /* test save and restore of the initial state */ tmp = srand(0); print '1501: tmp = srand(0)'; init = srand(); print '1502: init = srand()'; state0 = srand(0); print '1503: state0 = srand(0)'; vrfy(state0 == init, '1504: state0 == init'); /* test the additive 55 shuffle generator */ tmp = srand(0); print '1505: tmp = srand(0)'; vrfy(rand() == 0x1fe5b46fba7e069d, \ '1506: rand() == 0x1fe5b46fba7e069d'); vrfy(rand() == 0x308d32d9bdf2dc6f, \ '1507: rand() == 0x308d32d9bdf2dc6f'); tmp = srand(init); print '1508: tmp = srand(init)'; vrfy(rand() == 0x1fe5b46fba7e069d, \ '1509: rand() == 0x1fe5b46fba7e069d'); vrfy(rand() == 0x308d32d9bdf2dc6f, \ '1510: rand() == 0x308d32d9bdf2dc6f'); /* test range interface */ tmp = srand(0); print '1511: tmp = srand(0)'; vrfy(rand(12345678901234567890) == 0x1fe5b46fba7e069d, \ '1512: rand(12345678901234567890) == 0x1fe5b46fba7e069d'); vrfy(rand(216091) == 0xc234, '1513: rand(216091) == 0xc234'); vrfy(rand(100) == 0x59, '1514: rand(100) == 0x59'); vrfy(rand(-46,46) == 0x2d, '1515: rand(-46,46) == 0x2d'); tmp = srand(0); print '1516: tmp = srand(0)'; vrfy(rand(2^64) == 0x1fe5b46fba7e069d, \ '1517: rand(2^64) == 0x1fe5b46fba7e069d'); vrfy(rand(0,2^64) == 0x308d32d9bdf2dc6f, \ '1518: rand(0,2^64) == 0x308d32d9bdf2dc6f'); /* test different forms of seeding the initial state */ tmp = srand(0); print '1519: tmp = srand(0)'; vrfy(srand() == init, '1520: srand() == init'); tmp = srand(0x87e6ec938ff55aa5<<64); print '1521: tmp = srand(0x87e6ec938ff55aa5<<64)'; print '1522: test disabled'; tmp = srand(state0); print '1523: tmp = srand(state0)'; vrfy(srand() == init, '1524: srand() == init'); tmp = srand(init); print '1525: tmp = srand(init)'; vrfy(srand() == init, '1526: srand() == init'); vrfy(tmp == init, '1527: tmp == init'); /* test the bit length interface */ tmp = srand(0); print '1528: tmp = srand(0)'; vrfy(randbit(64) == 0x1fe5b46fba7e069d, \ '1529: randbit(64) == 0x1fe5b46fba7e069d'); vrfy(randbit(128) == 0x308d32d9bdf2dc6f45d3e3b3361b79e4, \ '1530: randbit(128) == 0x308d32d9bdf2dc6f45d3e3b3361b79e4'); vrfy(randbit(64) == 0xd4ef1e3336022d81, \ '1531: randbit(64) == 0xd4ef1e3336022d81'); vrfy(randbit(128) == 0x66b086e6c34e42124a1fc5d4e5c6f598, \ '1532: randbit(128) == 0x66b086e6c34e42124a1fc5d4e5c6f598'); tmp = srand(0); print '1533: tmp = srand(0)'; vrfy(randbit(32) == 0x1fe5b46f, '1534: randbit(32) == 0x1fe5b46f'); vrfy(randbit(32) == 0xba7e069d, '1535: randbit(32) == 0xba7e069d'); vrfy(randbit(1) == 0x0, '1536: randbit(1) == 0x0'); vrfy(randbit(5) == 0xc, '1537: randbit(5) == 0xc'); vrfy(randbit(33) == 0x46996cde, '1538: randbit(33) == 0x46996cde'); vrfy(randbit(25) == 0x1f2dc6f, '1539: randbit(25) == 0x1f2dc6f'); vrfy(randbit(2) == 0x1, '1540: randbit(2) == 0x1'); vrfy(randbit(13) == 0x2e9, '1541: randbit(13) == 0x2e9'); vrfy(randbit(18) == 0x3c766, '1542: randbit(18) == 0x3c766'); vrfy(randbit(8) == 0x6c, '1543: randbit(8) == 0x6c'); vrfy(randbit(9) == 0x6d, '1544: randbit(9) == 0x6d'); vrfy(randbit(70) == 0x39e4d4ef1e3336022d, \ '1545: randbit(70) == 0x39e4d4ef1e3336022d'); print '1546: test unused'; vrfy(randbit(8) == 0x81, '1547: randbit(8) == 0x81'); vrfy(randbit(65) == 0xcd610dcd869c8424, \ '1548: randbit(65) == 0xcd610dcd869c8424'); vrfy(randbit(63) == 0x4a1fc5d4e5c6f598, \ '1549: randbit(63) == 0x4a1fc5d4e5c6f598'); /* check to be sure that the srand(1) bug was fixed */ tmp = srand(1); print '1550: tmp = srand(1)'; n = 1; print '1551: n = 1'; vrfy(num(n), '1552: num(n)'); vrfy(den(n), '1553: den(n)'); vrfy(randbit(64) == 0xbf989a4c504a541d, \ '1554: randbit(64) == 0xbf989a4c504a541d'); /* test randbit skip interface */ tmp = srand(0); print '1555: tmp = srand(0)'; vrfy(randbit(20) == 0x1fe5b, '1556: randbit(20) == 0x1fe5b'); vrfy(randbit(20) == 0x46fba, '1557: randbit(20) == 0x46fba'); vrfy(randbit(20) == 0x7e069, '1558: randbit(20) == 0x7e069'); vrfy(randbit(20) == 0xd308d, '1559: randbit(20) == 0xd308d'); tmp = srand(0); print '1560: tmp = srand(0)'; vrfy(randbit(-20) == 20, '1561: randbit(-20) == 20'); vrfy(randbit(20) == 290746, '1562: randbit(20) == 290746'); vrfy(randbit(-20) == 20, '1563: randbit(-20) == 20'); vrfy(randbit(20) == 864397, '1564: randbit(20) == 864397'); /* test randbit without and arg */ tmp = srand(0); print '1565: tmp = srand(0)'; vrfy(randbit() == 0, '1566: randbit() == 0'); vrfy(randbit() == 0, '1567: randbit() == 0'); vrfy(randbit() == 0, '1568: randbit() == 0'); vrfy(randbit() == 1, '1569: randbit() == 1'); /* test seed() as best as we can */ vrfy(seed() >= 0, '1570: seed() >= 0'); vrfy(seed() < 2^64, '1571: seed() < 2^64'); vrfy(isrand(srand(seed())), '1572: isrand(srand(seed()))'); print '1573: Ending rand test'; } print '025: parsed test_rand()'; /* * Config mode/base testing */ define test_mode() { local tmp; print '1600: Beginning mode/base test'; tmp = config("mode", "frac"); print '1601: tmp = config("mode", "frac")'; tmp = config("mode", "frac"); print '1602: tmp = config("mode", "frac")'; vrfy(base() == 1/3, '1603: base() == 1/3'); tmp = config("mode", "int"); print '1604: tmp = config("mode", "int")'; vrfy(tmp == "fraction", '1605: tmp == "fraction"'); vrfy(base() == -10, '1606: base() == -10'); tmp = config("mode", "real"); print '1607: tmp = config("mode", "real")'; vrfy(tmp == "integer", '1608: tmp == "integer"'); vrfy(base() == 10, '1609: base() == 10'); tmp = config("mode", "exp"); print '1610: tmp = config("mode", "exp")'; vrfy(tmp == "real", '1611: tmp == "real"'); vrfy(base() == 1e20, '1612: base() == 1e20'); tmp = config("mode", "hex"); print '1613: tmp = config("mode", "hex")'; vrfy(tmp == "scientific", '1614: tmp == "scientific"'); vrfy(base() == 16, '1615: base() == 16'); tmp = config("mode", "oct"); print '1616: tmp = config("mode", "oct")'; vrfy(tmp == "hexadecimal", '1617: tmp == "hexadecimal"'); vrfy(base() == 8, '1618: base() == 8'); tmp = config("mode", "bin"); print '1619: tmp = config("mode", "bin")'; vrfy(tmp == "octal", '1620: tmp == "octal"'); vrfy(base() == 2, '1621: base() == 2'); tmp = config("mode", "real"); print '1622: tmp = config("mode", "real")'; vrfy(tmp == "binary", '1623: tmp == "binary"'); tmp = base(1/3); print '1624: tmp = base(1/3)'; vrfy(config("mode") == "fraction", '1625: config("mode") == "fraction"'); tmp = base(-10); print '1626: tmp = base(-10)'; vrfy(config("mode") == "integer", '1627: config("mode") == "integer"'); tmp = base(10); print '1628: tmp = base(10)'; vrfy(config("mode") == "real", '1629: config("mode") == "real"'); tmp = base(1e20); print '1630: tmp = base(1e20)'; vrfy(config("mode") == "scientific", '1631: config("mode") == "scientific"'); tmp = base(16); print '1632: tmp = base(16)'; vrfy(config("mode") == "hexadecimal", \ '1633: config("mode") == "hexadecimal"'); tmp = base(8); print '1634: tmp = base(8)'; vrfy(config("mode") == "octal", '1635: config("mode") == "octal"'); tmp = base(2); print '1636: tmp = base(2)'; vrfy(config("mode") == "binary",'1637: config("mode") == "binary"'); tmp = base(8); print '1638: tmp = base(8)'; vrfy(str(0x80000000) == "020000000000", \ '1639: str(0x8000000) == \"020000000000\"'); vrfy(str(0xffffffff) == "037777777777", \ '1640: str(0xffffffff) == \"037777777777\"'); vrfy(str(3e9) == "026264057000", \ '1641: str(3e9) == \"026264057000\"'); tmp = base(16); print '1642: tmp = base(16)'; vrfy(str(0x80000000) == "0x80000000", \ '1643: str(0x8000000) == \"0x80000000\"'); vrfy(str(0xffffffff) == "0xffffffff", \ '1644: str(0xffffffff) == \"0xffffffff\"'); vrfy(str(3e9) == "0xb2d05e00", \ '1645: str(3e9) == \"0xb2d05e00\"'); tmp = base(10); print '1646: tmp = base(10)'; vrfy(config("mode") == "real", \ '1647: config("mode") == "real"'); vrfy(str(0x80000000) == "2147483648", \ '1648: str(0x80000000) == \"2147483648\"'); vrfy(str(0xffffffff) == "4294967295", \ '1649: str(0xffffffff) == \"4294967295\"'); vrfy(str(3e9) == "3000000000", \ '1650: str(3e9) == \"3000000000\"'); /* test base2() functionality */ vrfy(base2() == 0, '1651: base2() == 0'); vrfy(base2(0) == 0, '1652: base2(0) == 0'); vrfy(base2() == 0, '1653: base2() == 0'); vrfy(base2(16) == 0, '1654: base2(16) == 0'); vrfy(base2() == 16, '1655: base2() == 16'); vrfy(str(3e9) == "3000000000 /* 0xb2d05e00 */", '1656: str(3e9) == "3000000000 /* 0xb2d05e00 */"'); vrfy(base2(1/3) == 16, '1657: base2(16) == 16'); vrfy(str(23209) == "23209 /* 23209 */", '1658: str(23209) == "23209 /* 23209 */"'); vrfy(str(3/2) == "1.5 /* 3/2 */", '1659: str(3/2) == "1.5 /* 3/2 */"'); vrfy(base() == 10, '1660: base() == 10'); vrfy(base2(0) == 1/3, '1661: base2(0) == 1/3'); print '1662: Ending mode/base test'; } print '026: parsed test_mode()'; /* * The 1700's contain tests for reading resource files. These tests are * done inline near the bottom. */ /* * Test objects */ read -once "surd"; print '027: read -once surd'; /**/ define test_obj() { static obj surd a; static obj surd b; local PP; print '1800: Beginning object test'; surd_type = -1; vrfy(surd_type == -1, '1801: surd_type == -1'); a = surd(2,3); print '1802: a = surd(2,3)'; vrfy(a == surd(2,3), '1803: a == surd(2,3)'); vrfy(surd_value(a) == 2+3i, '1804: surd_value(a) == 2+3i'); vrfy(conj(a) == surd(2,-3), '1805: conj(a) == surd(2,-3)'); vrfy(norm(a) == 13, '1806: norm(a) == 13'); vrfy(a+1 == surd(3,3), '1807: a+1 == surd(3,3)'); b = surd(3,4); print '1808: b = surd(3,4)'; vrfy(a+b == surd(5,7), '1809: a+b == surd(5,7)'); vrfy(a-b == surd(-1,-1), '1810: a-b == surd(-1,-1)'); vrfy(++a == surd(3,3), '1811: ++a == surd(3,3)'); vrfy(--a == surd(2,3), '1812: --a == surd(2,3)'); vrfy(-a == surd(-2,-3), '1813: -a == surd(-2,-3)'); vrfy(a*2 == surd(4,6), '1814: a*2 == surd(4,6)'); vrfy(a*b == surd(-6,17), '1815: a*b == surd(-6,17)'); vrfy(a^2 == surd(-5,12), '1816: a^2 == surd(-5,12)'); vrfy(scale(a,2) == surd(8,12), '1817: scale(a,2) == surd(8,12)'); vrfy(a<<3 == surd(16,24), '1818: a<<3 == surd(16,24)'); vrfy(a/2 == surd(1,1.5), '1819: a/2 == surd(1,1.5)'); vrfy(a/b == surd(0.72,0.04), '1820: a/b == surd(0.72,0.04)'); vrfy(1/b == surd(0.12,-0.16), '1821: 1/b == surd(0.12,-0.16)'); vrfy(inverse(b) == 1/b, '1822: inverse(b) == 1/b'); vrfy(a != b, '1823: a != b'); surd_type = 2; print '1824: surd_type = 2'; vrfy(surd_type == 2, '1825: surd_type == 2'); vrfy(sgn(a) == 1, '1826: sgn(a) == 1'); vrfy(a < b, '1827: a < b'); vrfy(a <= a, '1828: a < a'); vrfy(isobj(a) == 1, '1829: isobj(a) == 1'); obj pt {x,y}, PP = obj pair {A,B} = {obj pt, obj pt}; print '1830: obj pt {x,y}, PP = obj pair {A,B} = {obj pt, obj pt}'; print '1831: Ending object test'; } print '028: parsed test_obj()'; /* * Prime builtin function testing */ define test_prime() { print '1900: Beginning prime builtins test'; vrfy(isprime(-3) == 1, '1901: isprime(-3) == 1'); vrfy(isprime(-1) == 0, '1902: isprime(-1) == 0'); vrfy(isprime(0) == 0, '1903: isprime(0) == 0'); vrfy(isprime(1) == 0, '1904: isprime(1) == 0'); vrfy(isprime(2) == 1, '1905: isprime(2) == 1'); vrfy(isprime(3) == 1, '1906: isprime(3) == 1'); vrfy(isprime(4) == 0, '1907: isprime(4) == 0'); vrfy(isprime(5) == 1, '1908: isprime(5) == 1'); vrfy(isprime(17) == 1, '1909: isprime(17) == 1'); vrfy(isprime(100) == 0, '1910: isprime(100) == 0'); vrfy(isprime(21701,-1) == 1, '1911: isprime(21701,-1) == 1'); vrfy(isprime(65521,-1) == 1, '1912: isprime(65521,-1) == 1'); vrfy(isprime(65535,-1) == 0, '1913: isprime(65535,-1) == 0'); vrfy(isprime(65536,-1) == 0, '1914: isprime(65536,-1) == 0'); vrfy(isprime(1234577) == 1, '1915: isprime(1234577) == 1'); vrfy(isprime(1234579) == 0, '1916: isprime(1234579) == 0'); vrfy(isprime(2^31-9) == 0, '1917: isprime(2^31-9) == 0'); vrfy(isprime(2^31-1) == 1, '1918: isprime(2^31-1) == 1'); vrfy(isprime(2^31+9) == 0, '1919: isprime(2^31+11) == 0'); vrfy(isprime(2^31+11) == 1, '1920: isprime(2^31+11) == 1'); vrfy(isprime(3e9) == 0, '1921: isprime(3e9) == 0'); vrfy(isprime(3e9+19) == 1, '1922: isprime(3e9+19) == 1'); vrfy(isprime(2^32-7) == 0, '1923: isprime(2^32-7) == 0'); vrfy(isprime(2^32-5) == 1, '1924: isprime(2^32-5) == 1'); vrfy(isprime(2^32,-1) == 0, '1925: isprime(2^32,-1) == 0'); vrfy(isprime(2^32+1,-1) == -1, '1926: isprime(2^32+1,-1) == -1'); vrfy(isprime(3^99,2) == 2, '1927: isprime(3^99,2) == 2'); vrfy(isprime(4^99,2) == 0, '1928: isprime(3^99,2) == 0'); vrfy(nextprime(-3) == 5, '1929: nextprime(-3) == 5'); vrfy(nextprime(0) == 2, '1930: nextprime(0) == 2'); vrfy(nextprime(1) == 2, '1931: nextprime(1) == 2'); vrfy(nextprime(2) == 3, '1932: nextprime(2) == 3'); vrfy(nextprime(3) == 5, '1933: nextprime(3) == 5'); vrfy(nextprime(4) == 5, '1934: nextprime(4) == 5'); vrfy(nextprime(5) == 7, '1935: nextprime(5) == 7'); vrfy(nextprime(17) == 19, '1936: nextprime(17) == 19'); vrfy(nextprime(100) == 101, '1937: nextprime(100) == 101'); vrfy(nextprime(21701,-1) == 21713, '1938: nextprime(21701,-1) == 21713'); vrfy(nextprime(65519) == 65521, '1939: nextprime(65519) == 65521'); vrfy(nextprime(65520) == 65521, '1940: nextprime(65520) == 65521'); vrfy(nextprime(65521,-1) == 65537, '1941: nextprime(65521,-1) == 65537'); vrfy(nextprime(65531) == 65537, '1942: nextprime(65531) == 65537'); vrfy(nextprime(65535,-1) == 65537, '1943: nextprime(65535,-1) == 65537'); vrfy(nextprime(65536) == 65537, '1944: nextprime(65536) == 65537'); vrfy(nextprime(1234576,2)==1234577, '1945: nextprime(1234576,2)==1234577'); vrfy(nextprime(2^31-9) == 2^31-1, '1946: nextprime(2^31-9) == 2^31-1'); vrfy(nextprime(2^31-1) == 2^31+11, '1947: nextprime(2^31-1) == 2^31+11'); vrfy(nextprime(3e9) == 3e9+19,'1948: nextprime(3e9) == 3e9+19'); vrfy(nextprime(2^32-7) == 2^32-5, '1949: nextprime(2^32-7) == 2^32-5'); vrfy(nextprime(2^32,-1) == -1, '1950: nextprime(2^32,-1) == -1'); vrfy(nextprime(2^32+5,-1) == -1,'1951: nextprime(2^32+5,-1) == -1'); vrfy(nextprime(3^99,-1) == -1, '1952: nextprime(3^99,-1) == -1'); vrfy(nextprime(3^99,2) == 2, '1953: nextprime(3^99,2) == 2'); vrfy(prevprime(-3,-1) == 2, '1954: prevprime(-3,-1) == 2'); vrfy(prevprime(0,-1) == 0, '1955: prevprime(0,-1) == 0'); vrfy(prevprime(1,-1) == 0, '1956: prevprime(1,-1) == 0'); vrfy(prevprime(2,-2) == 0, '1957: prevprime(2,-2) == 0'); vrfy(prevprime(5) == 3, '1958: prevprime(5) == 3'); vrfy(prevprime(4) == 3, '1959: prevprime(4) == 3'); vrfy(prevprime(7) == 5, '1960: prevprime(7) == 5'); vrfy(prevprime(19) == 17, '1961: prevprime(19) == 17'); vrfy(prevprime(100) == 97, '1962: prevprime(100) == 97'); vrfy(prevprime(21713,-1) == 21701, '1963: prevprime(21713,-1) == 21701'); vrfy(prevprime(65520) == 65519, '1964: prevprime(65520) == 65519'); vrfy(prevprime(65521) == 65519, '1965: prevprime(65521) == 65519'); vrfy(prevprime(65522) == 65521, '1966: prevprime(65520) == 65521'); vrfy(prevprime(65523) == 65521, '1967: prevprime(65523) == 65521'); vrfy(prevprime(65531) == 65521, '1968: prevprime(65531) == 65521'); vrfy(prevprime(65535) == 65521, '1969: prevprime(65535) == 65521'); vrfy(prevprime(65536) == 65521, '1970: prevprime(65536) == 65521'); vrfy(prevprime(65537) == 65521, '1971: prevprime(65537) == 65521'); vrfy(prevprime(65539) == 65537, '1972: prevprime(65539) == 65537'); vrfy(prevprime(1234578,2)==1234577, '1973: prevprime(1234578,2)==1234577'); vrfy(prevprime(2^31-1) == 2^31-19, '1974: prevprime(2^31-1) == 2^31-19'); vrfy(prevprime(2^31+11) == 2^31-1, '1975: prevprime(2^31+11) == 2^31-1'); vrfy(prevprime(3e9) == 3e9-71,'1976: prevprime(3e9) == 3e9-17'); vrfy(prevprime(2^32-3) == 2^32-5, '1977: prevprime(2^32-3) == 2^32-5'); vrfy(prevprime(2^32-1) == 2^32-5, '1978: prevprime(2^32-1) == 2^32-5'); vrfy(prevprime(2^32,-1) == -1, '1979: prevprime(2^32,-1) == -1'); vrfy(prevprime(3^99,-1) == -1, '1980: prevprime(3^99,-1) == -1'); vrfy(prevprime(3^99,2) == 2, '1981: prevprime(3^99,2) == 2'); vrfy(pix(-1) == 0, '1982: pix(-1) == 0'); vrfy(pix(1) == 0, '1983: pix(1) == 0'); vrfy(pix(2) == 1, '1984: pix(2) == 1'); vrfy(pix(3) == 2, '1985: pix(3) == 2'); vrfy(pix(100) == 25, '1986: pix(100) == 25'); vrfy(pix(1000) == 168, '1987: pix(1000) == 168'); vrfy(pix(10000) == 1229, '1988: pix(10000) == 1229'); vrfy(pix(100000) == 9592, '1989: pix(100000) == 9592'); vrfy(pix(2^19+59) == 43393, '1990: pix(2^19+59) == 43393'); vrfy(pix(1000000) == 78498, '1991: pix(1000000) == 78498'); vrfy(pix(10000000) == 664579, '1992: pix(10000000) == 664579'); vrfy(pix(2^32-6) == 203280220, '1993: pix(2^32-6) == 203280220'); vrfy(pix(2^32-5) == 203280221, '1994: pix(2^32-5) == 203280221'); vrfy(pix(2^32-1) == 203280221, '1995: pix(2^32-1) == 203280221'); vrfy(pfact(40) == 7420738134810,'1996: pfact(40) == 7420738134810'); vrfy(pfact(200)/pfact(198)==199,'1997: pfact(200)/pfact(198)==199'); vrfy(nextprime(3e9)==nextcand(3e9), '1998: nextprime(3e9)==nextcand(3e9)'); vrfy(prevprime(3e9)==prevcand(3e9), '1999: prevprime(3e9)==prevcand(3e9)'); vrfy(nextcand(2^100,0)-2^100 == 3, '2000: nextcand(2^100,0)-2^100 == 3'); vrfy(nextcand(2^100)-2^100 == 277, '2001: nextcand(2^100)-2^100 == 277'); vrfy(2^100-prevcand(2^100,0) == 5, '2002: 2^100-prevcand(2^100,0) == 5'); vrfy(2^100-prevcand(2^100) == 15, '2003: 2^100-prevcand(2^100) == 15'); vrfy(nextcand(2^50,4,5)-2^50 == 55, '2004: nextcand(2^50,4,5)-2^50 == 55'); vrfy(2^50-prevcand(2^50,4,5) == 27, '2005: 2^50-prevcand(2^50,4,5) == 27'); vrfy(nextprime(2^32-6) == 2^32-5, '2006: nextprime(2^32-6) == 2^32-5'); vrfy(nextprime(2^32-5) == 2^32+15, '2007: nextprime(2^32-5) == 2^32+15'); vrfy(prevprime(2^32-1) == 2^32-5, '2008: prevprime(2^32-1) == 2^32-5'); vrfy(prevcand(2^50,4,5,0,4) == 0, '2009: prevcand(2^50,4,5,0,4) == 0'); vrfy(2^50-prevcand(2^50,4,5,1,4) == 27, '2010: 2^50-prevcand(2^50,4,5,1,4) == 27'); vrfy(prevcand(2^50,4,5,2,4) == 2, '2011: prevcand(2^50,4,5,2,4) == 2'); vrfy(2^50-prevcand(2^50,4,5,3,4) == 113, '2012: 2^50-prevcand(2^50,4,5,3,4) == 113'); vrfy(2^50-prevcand(2^50,4,5,7,17) == 813, '2013: 2^50-prevcand(2^50,4,5,7,17) == 813'); vrfy(nextcand(2^50,4,5,0,4) == 0, '2014: nextcand(2^50,4,5,0,4) == 0'); vrfy(nextcand(2^50,4,5,1,4)-2^50 == 145, '2015: nextcand(2^50,4,5,1,4)-2^50 == 145'); vrfy(nextcand(2^50,4,5,2,4) == 0, '2016: nextcand(2^50,4,5,2,4) == 0'); vrfy(nextcand(2^50,4,5,3,4)-2^50 == 55, '2017: nextcand(2^50,4,5,3,4)-2^50 == 55'); vrfy(nextcand(2^50,4,5,7,17)-2^50 == 853, '2018: nextcand(2^50,4,5,7,17)-2^50 == 853'); vrfy(ptest(2^100+277) == 1, '2019: ptest(2^100+277) == 1'); vrfy(ptest(2^50-27,4,5) == 1, '2020: ptest(2^50-27,4,5) == 1'); vrfy(ptest(2^50+55,4,5) == 1, '2021: ptest(2^50+55,4,5) == 1'); vrfy(ptest(2^32+1,10) == 0, '2022: ptest(2^32+1,10) == 0'); vrfy(lfactor(1001,100) == 7, '2023: lfactor(1001,100) == 7'); vrfy(lfactor(1001,4) == 7, '2024: lfactor(1001,4) == 7'); vrfy(lfactor(1001,3) == 1, '2025: lfactor(1001,3) == 1'); vrfy(lfactor(127,10000) == 1, '2026: lfactor(127,10000) == 1'); vrfy(lfactor(2^19-1,10000) == 1,'2027: lfactor(2^19-1,10000) == 1'); vrfy(lfactor(2^31-1,10000) == 1,'2028: lfactor(2^31-1,10000) == 1'); vrfy(lfactor(2^32-5,10000) == 1,'2029: lfactor(2^32-5,10000) == 1'); vrfy(lfactor(2^38+7,50000) == 1,'2030: lfactor(2^38+7,50000) == 1'); vrfy(lfactor(1009^2,pix(1009)) == 1009, '2031: lfactor(1009^2,pix(1009)) == 1009'); vrfy(lfactor(1009^2,pix(1009)-1) == 1, '2032: lfactor(1009^2,pix(1009)-1) == 1'); vrfy(lfactor(65519*65521,7000) == 65519, '2033: lfactor(65519*65521,7000) == 65519'); vrfy(lfactor(65521^2,pix(65521)) == 65521, '2034: lfactor(65521^2,pix(65521)) == 65521'); vrfy(lfactor(65521^2,pix(65521)-1) == 1, '2035: lfactor(65521^2,pix(65521)-1) == 1'); vrfy(lfactor(524309^6,100000) == 524309, '2036: lfactor(524309^6,100000) == 524309'); print '2037: Ending prime builtins test'; } print '029: parsed test_prime()'; /* * Test the Lucas primality test resource file */ read -once "lucas_chk"; /* obtain our needed Lucas resource file */ print '030: read lucas_chk'; /**/ define test_lucas() { print '2100: Beginning lucas check test'; vrfy(lucas_chk(100,1) == 1, '2101: lucas_chk(100,1) == 1'); print '2102: Ending lucas check test'; } print '031: parsed test_lucas()'; /* * Test new operator functionality */ define test_newop() { static mat A[3] = {1,2,3}; static mat A2[3] = {1,2,3}; local B; local v; local a; local b; print '2200: Beginning new operator functionality test'; (v = 3) = 4; print '2201: (v = 3) = 4'; vrfy(v == 4, '2202: v == 4'); (v += 3) *= 4; print '2203: (v += 3) *= 4'; vrfy(v == 28, '2204: v == 28'); vrfy(A == A2, '2205: A == A2'); matfill(B = A, 4); print '2206: matfill(B = A, 4)'; vrfy(A == A2, '2207: A == A2'); vrfy(size(B) == 3, '2208: size(B) == 3'); vrfy(B[0] == 4, '2209: B[0] == 4'); vrfy(B[1] == 4, '2210: B[1] == 4'); vrfy(B[2] == 4, '2211: B[2] == 4'); a = 3; print '2212: a = 3'; ++(b = a); print '2213: ++(b = a)'; vrfy(a == 3, '2214: a == 3'); vrfy(b == 4, '2215: b == 4'); ++++a; print '2216: ++++a'; vrfy(a == 5, '2217: a == 5'); vrfy((++a)++ == 6, '2218: (++a)++ == 6'); vrfy(a == 7, '2219: a == 7'); (++a) *= b; print '2220: (++a) *= b'; vrfy(a == 32, '2221: a == 32'); vrfy(b == 4, '2222: b == 4'); vrfy(++(a*=b) == 129, '2223: ++(a*=b) == 129'); vrfy(a == 129, '2224: a == 129'); vrfy(b == 4, '2225: b == 4'); vrfy((a = (--a / b++))-- == 32, '2226: (a = (--a / b++))-- == 32'); vrfy(a == 31, '2227: a == 31'); vrfy(b == 5, '2228: b == 5'); vrfy((++++a / ----b) == 11, '2229: (++++a / ----b) == 11'); vrfy(a == 33, '2230: a == 33'); vrfy(b == 3, '2231: b == 3'); vrfy((a/=(--a/++b))-- == 4, '2232: (a/=(--a/++b))-- == 4'); vrfy(a == 3, '2233: a == 3'); vrfy(b == 4, '2234: b == 4'); v = a----; print '2235: v = a----'; vrfy(v == 3, '2236: v == 3'); vrfy(a == 1, '2237: a == 1'); a = ----v; print '2238: a = ----v'; vrfy(a == 1, '2239: a == 1'); vrfy(v == 1, '2240: v == 1'); v = a++++; print '2241: v = a++++'; vrfy(a == 3, '2242: a == 3'); vrfy(v == 1, '2243: v == 1'); a = ++++v; print '2244: a = ++++v'; vrfy(a == 3, '2245: a == 3'); vrfy(v == 3, '2246: v == 3'); a = ----v----; print '2247: a = ----v----'; vrfy(a == 1, '2248: a == 1'); vrfy(v == -1, '2249: v == -1'); v = ++++a++++; print '2250: v = ++++a++++'; vrfy(a == 5, '2251: a == 5'); vrfy(v == 3, '2252: v == 3'); a = ++++v----; print '2253: a = ++++v----'; vrfy(a == 5, '2254: a == 5'); vrfy(v == 3, '2255: v == 3'); v = --++a--++; print '2256: v = --++a--++'; vrfy(a == 5, '2257: a == 5'); vrfy(v == 5, '2258: v == 5'); a = -++v; print '2259: a = -++v'; vrfy(a == -6, '2260: a == -6'); vrfy(v == 6, '2261: v == 6'); print '2262: Ending new operator functionality test'; } print '032: parsed test_newop()'; /* * Test object increment/decrement */ read -once "test2300"; print '033: read -once test2300'; /**/ define test_xx_incdec() { local A, B; local n; print '2300: Beginning object increment/decrement test'; A = mkmat(1,2,3); print '2301: A = mkmat(1,2,3)'; vrfy(ckmat(A,1,2,3) == 1, '2302: ckmat(A,1,2,3) == 1'); B = A++; print '2303: B = A++'; vrfy(ckmat(B,1,2,3) == 1, '2304: ckmat(B,1,2,3) == 1'); vrfy(ckmat(A,2,3,4) == 1, '2305: ckmat(A,2,3,4) == 1'); B = A--; print '2306: B = A--'; vrfy(ckmat(A,1,2,3) == 1, '2307: ckmat(A,1,2,3) == 1'); vrfy(ckmat(B,2,3,4) == 1, '2308: ckmat(B,2,3,4) == 1'); B = ++A; print '2309: B = ++A'; vrfy(ckmat(A,2,3,4) == 1, '2310: ckmat(A,2,3,4) == 1'); vrfy(ckmat(B,2,3,4) == 1, '2311: ckmat(B,2,3,4) == 1'); B = --A; print '2312: B = --A'; vrfy(ckmat(A,1,2,3) == 1, '2313: ckmat(A,1,2,3) == 1'); vrfy(ckmat(B,1,2,3) == 1, '2314: ckmat(B,1,2,3) == 1'); n = 1; print '2315: n = 1'; vrfy(n + n + n + n++ == 4, '2316: n + n + n + n++ == 4'); vrfy(n == 2, '2317: n == 2'); n = 1; print '2318: n = 1'; vrfy(n + n + n++ == 3, '2319: n + n + n++ == 3'); vrfy(n == 2, '2320: n == 2'); n = 1; print '2321: n = 1'; vrfy(n + n++ == 2, '2322: n + n++ == 3'); vrfy(n == 2, '2323: n == 2'); print '2315: Ending object increment/decrement test'; } print '034: parsed test_xx_incdec()'; /* * testing rounding config modes */ define test_round() { local mode; print '2400: Beginning config rounding mode test'; /* appr mode 0 */ mode =