ref: 32b537dbdb56584c3dfdb9f95f1d1cec0359d7d7
dir: /3rd/mp/test/gen.tab.c/
#include "platform.h" #include "mp.h" #include "dat.h" #include "fns.h" static void testcmp(void) { int fail=0; int a, b; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); int i3; for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=0;i3<NTEST;i3++){ testgen(i3, l3); a=ldcmp(l2, l3); ldtomp(l2, m2); ldtomp(l3, m3); b=mpcmp(m2, m3); if(b<0) b=-1; if(b>0) b=1; if(a != b){ fprintf(stderr, "FAIL: mpcmp(%s, %s): return value: got %d, expected %d\n", LFMT(l2), LFMT(l3), b, a); fail=1; } if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpcmp(%s, %s): arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpcmp(%s, %s): arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); if(!fail) fprintf(stderr, "mpcmp: passed\n"); } static void testmagcmp(void) { int fail=0; int a, b; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); int i3; for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=0;i3<NTEST;i3++){ testgen(i3, l3); a=ldmagcmp(l2, l3); ldtomp(l2, m2); ldtomp(l3, m3); b=mpmagcmp(m2, m3); if(b<0) b=-1; if(b>0) b=1; if(a != b){ fprintf(stderr, "FAIL: mpmagcmp(%s, %s): return value: got %d, expected %d\n", LFMT(l2), LFMT(l3), b, a); fail=1; } if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpmagcmp(%s, %s): arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpmagcmp(%s, %s): arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); if(!fail) fprintf(stderr, "mpmagcmp: passed\n"); } static void testadd(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=0;i3<NTEST;i3++){ testgen(i3, l3); ldadd(l2, l3, l4); ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpadd(m2, m3, m4); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m4), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpadd(m2, m3, m2); if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): alias 3 and 1: arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m2), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpadd(m2, m3, m3); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): alias 3 and 2: arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m3->top == 0 && m3->sign < 0){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): alias 3 and 2: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m3->top != 0 && m3->p[m3->top - 1] == 0){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): alias 3 and 2: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m3)){ fprintf(stderr, "FAIL: mpadd(%s, %s, out): alias 3 and 2: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m3), LFMT(l4)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); ldfree(l4); mpfree(m4); if(!fail) fprintf(stderr, "mpadd: passed\n"); } static void testsub(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=0;i3<NTEST;i3++){ testgen(i3, l3); ldsub(l2, l3, l4); ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpsub(m2, m3, m4); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m4), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpsub(m2, m3, m2); if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): alias 3 and 1: arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m2), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpsub(m2, m3, m3); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): alias 3 and 2: arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m3->top == 0 && m3->sign < 0){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): alias 3 and 2: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m3->top != 0 && m3->p[m3->top - 1] == 0){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): alias 3 and 2: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m3)){ fprintf(stderr, "FAIL: mpsub(%s, %s, out): alias 3 and 2: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m3), LFMT(l4)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); ldfree(l4); mpfree(m4); if(!fail) fprintf(stderr, "mpsub: passed\n"); } static void testmagadd(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=0;i3<NTEST;i3++){ testgen(i3, l3); ldmagadd(l2, l3, l4); ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpmagadd(m2, m3, m4); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m4), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpmagadd(m2, m3, m2); if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): alias 3 and 1: arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m2), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpmagadd(m2, m3, m3); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): alias 3 and 2: arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m3->top == 0 && m3->sign < 0){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): alias 3 and 2: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m3->top != 0 && m3->p[m3->top - 1] == 0){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): alias 3 and 2: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m3)){ fprintf(stderr, "FAIL: mpmagadd(%s, %s, out): alias 3 and 2: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m3), LFMT(l4)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); ldfree(l4); mpfree(m4); if(!fail) fprintf(stderr, "mpmagadd: passed\n"); } static void testmagsub(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=0;i3<NTEST;i3++){ testgen(i3, l3); ldmagsub(l2, l3, l4); ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpmagsub(m2, m3, m4); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m4), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpmagsub(m2, m3, m2); if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): alias 3 and 1: arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m2), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpmagsub(m2, m3, m3); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): alias 3 and 2: arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m3->top == 0 && m3->sign < 0){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): alias 3 and 2: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m3->top != 0 && m3->p[m3->top - 1] == 0){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): alias 3 and 2: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m3)){ fprintf(stderr, "FAIL: mpmagsub(%s, %s, out): alias 3 and 2: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m3), LFMT(l4)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); ldfree(l4); mpfree(m4); if(!fail) fprintf(stderr, "mpmagsub: passed\n"); } static void testand(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=0;i3<NTEST;i3++){ testgen(i3, l3); ldand(l2, l3, l4); ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpand(m2, m3, m4); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpand(%s, %s, out): arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpand(%s, %s, out): arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpand(%s, %s, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpand(%s, %s, out): arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpand(%s, %s, out): arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m4), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpand(m2, m3, m2); if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpand(%s, %s, out): alias 3 and 1: arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpand(%s, %s, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpand(%s, %s, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpand(%s, %s, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m2), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpand(m2, m3, m3); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpand(%s, %s, out): alias 3 and 2: arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m3->top == 0 && m3->sign < 0){ fprintf(stderr, "FAIL: mpand(%s, %s, out): alias 3 and 2: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m3->top != 0 && m3->p[m3->top - 1] == 0){ fprintf(stderr, "FAIL: mpand(%s, %s, out): alias 3 and 2: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m3)){ fprintf(stderr, "FAIL: mpand(%s, %s, out): alias 3 and 2: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m3), LFMT(l4)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); ldfree(l4); mpfree(m4); if(!fail) fprintf(stderr, "mpand: passed\n"); } static void testbic(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=0;i3<NTEST;i3++){ testgen(i3, l3); ldbic(l2, l3, l4); ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpbic(m2, m3, m4); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m4), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpbic(m2, m3, m2); if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): alias 3 and 1: arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m2), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpbic(m2, m3, m3); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): alias 3 and 2: arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m3->top == 0 && m3->sign < 0){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): alias 3 and 2: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m3->top != 0 && m3->p[m3->top - 1] == 0){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): alias 3 and 2: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m3)){ fprintf(stderr, "FAIL: mpbic(%s, %s, out): alias 3 and 2: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m3), LFMT(l4)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); ldfree(l4); mpfree(m4); if(!fail) fprintf(stderr, "mpbic: passed\n"); } static void testor(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=0;i3<NTEST;i3++){ testgen(i3, l3); ldor(l2, l3, l4); ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpor(m2, m3, m4); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpor(%s, %s, out): arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpor(%s, %s, out): arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpor(%s, %s, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpor(%s, %s, out): arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpor(%s, %s, out): arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m4), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpor(m2, m3, m2); if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpor(%s, %s, out): alias 3 and 1: arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpor(%s, %s, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpor(%s, %s, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpor(%s, %s, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m2), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpor(m2, m3, m3); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpor(%s, %s, out): alias 3 and 2: arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m3->top == 0 && m3->sign < 0){ fprintf(stderr, "FAIL: mpor(%s, %s, out): alias 3 and 2: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m3->top != 0 && m3->p[m3->top - 1] == 0){ fprintf(stderr, "FAIL: mpor(%s, %s, out): alias 3 and 2: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m3)){ fprintf(stderr, "FAIL: mpor(%s, %s, out): alias 3 and 2: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m3), LFMT(l4)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); ldfree(l4); mpfree(m4); if(!fail) fprintf(stderr, "mpor: passed\n"); } static void testxor(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=0;i3<NTEST;i3++){ testgen(i3, l3); ldxor(l2, l3, l4); ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpxor(m2, m3, m4); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m4), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpxor(m2, m3, m2); if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): alias 3 and 1: arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m2), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mpxor(m2, m3, m3); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): alias 3 and 2: arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m3->top == 0 && m3->sign < 0){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): alias 3 and 2: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m3->top != 0 && m3->p[m3->top - 1] == 0){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): alias 3 and 2: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m3)){ fprintf(stderr, "FAIL: mpxor(%s, %s, out): alias 3 and 2: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m3), LFMT(l4)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); ldfree(l4); mpfree(m4); if(!fail) fprintf(stderr, "mpxor: passed\n"); } static void testnot(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); ldnot(l2, l3); ldtomp(l2, m2); mptarget(m3); mpnot(m2, m3); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpnot(%s, out): arg 1: input corrupted\n", LFMT(l2)); fail=1; } if(m3->top == 0 && m3->sign < 0){ fprintf(stderr, "FAIL: mpnot(%s, out): arg 2: got -0, shouldn't happen\n", LFMT(l2)); fail=1; }else if(m3->top != 0 && m3->p[m3->top - 1] == 0){ fprintf(stderr, "FAIL: mpnot(%s, out): arg 2: got denormalised result\n", LFMT(l2)); fail=1; }else if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpnot(%s, out): arg 2: got %s, expected %s\n", LFMT(l2), MFMT(m3), LFMT(l3)); fail=1; } ldtomp(l2, m2); mptarget(m3); mpnot(m2, m2); if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpnot(%s, out): alias 2 and 1: arg 2: got -0, shouldn't happen\n", LFMT(l2)); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpnot(%s, out): alias 2 and 1: arg 2: got denormalised result\n", LFMT(l2)); fail=1; }else if(!ldmpeq(l3, m2)){ fprintf(stderr, "FAIL: mpnot(%s, out): alias 2 and 1: arg 2: got %s, expected %s\n", LFMT(l2), MFMT(m2), LFMT(l3)); fail=1; } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); if(!fail) fprintf(stderr, "mpnot: passed\n"); } static void testleft(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=-128;i3<=128;i3++){ ldleft(l2, i3, l4); ldtomp(l2, m2); mptarget(m4); mpleft(m2, i3, m4); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpleft(%s, %d, out): arg 1: input corrupted\n", LFMT(l2), i3); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpleft(%s, %d, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), i3); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpleft(%s, %d, out): arg 3: got denormalised result\n", LFMT(l2), i3); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpleft(%s, %d, out): arg 3: got %s, expected %s\n", LFMT(l2), i3, MFMT(m4), LFMT(l4)); fail=1; } ldtomp(l2, m2); mptarget(m4); mpleft(m2, i3, m2); if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpleft(%s, %d, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), i3); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpleft(%s, %d, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), i3); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpleft(%s, %d, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), i3, MFMT(m2), LFMT(l4)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l4); mpfree(m4); if(!fail) fprintf(stderr, "mpleft: passed\n"); } static void testright(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=-128;i3<=128;i3++){ ldright(l2, i3, l4); ldtomp(l2, m2); mptarget(m4); mpright(m2, i3, m4); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpright(%s, %d, out): arg 1: input corrupted\n", LFMT(l2), i3); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpright(%s, %d, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), i3); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpright(%s, %d, out): arg 3: got denormalised result\n", LFMT(l2), i3); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpright(%s, %d, out): arg 3: got %s, expected %s\n", LFMT(l2), i3, MFMT(m4), LFMT(l4)); fail=1; } ldtomp(l2, m2); mptarget(m4); mpright(m2, i3, m2); if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpright(%s, %d, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), i3); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpright(%s, %d, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), i3); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpright(%s, %d, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), i3, MFMT(m2), LFMT(l4)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l4); mpfree(m4); if(!fail) fprintf(stderr, "mpright: passed\n"); } static void testasr(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=-128;i3<=128;i3++){ ldasr(l2, i3, l4); ldtomp(l2, m2); mptarget(m4); mpasr(m2, i3, m4); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpasr(%s, %d, out): arg 1: input corrupted\n", LFMT(l2), i3); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpasr(%s, %d, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), i3); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpasr(%s, %d, out): arg 3: got denormalised result\n", LFMT(l2), i3); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpasr(%s, %d, out): arg 3: got %s, expected %s\n", LFMT(l2), i3, MFMT(m4), LFMT(l4)); fail=1; } ldtomp(l2, m2); mptarget(m4); mpasr(m2, i3, m2); if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpasr(%s, %d, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), i3); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpasr(%s, %d, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), i3); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpasr(%s, %d, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), i3, MFMT(m2), LFMT(l4)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l4); mpfree(m4); if(!fail) fprintf(stderr, "mpasr: passed\n"); } static void testdiv_(void) { int fail=0; ldint *l2 = ldnew(0); mpint *m2 = mpnew(0); int i2; ldint *l3 = ldnew(0); mpint *m3 = mpnew(0); int i3; ldint *l4 = ldnew(0); mpint *m4 = mpnew(0); ldint *l5 = ldnew(0); mpint *m5 = mpnew(0); for(i2=0;i2<NTEST;i2++){ testgen(i2, l2); for(i3=0;i3<NTEST;i3++){ testgen(i3, l3); lddiv_(l2, l3, l4, l5); ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mptarget(m5); mpdiv_(m2, m3, m4, m5); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m4), LFMT(l4)); fail=1; } if(m5->top == 0 && m5->sign < 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): arg 4: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m5->top != 0 && m5->p[m5->top - 1] == 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): arg 4: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l5, m5)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): arg 4: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m5), LFMT(l5)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mptarget(m5); mpdiv_(m2, m3, m2, m5); if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 1: arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m5->top == 0 && m5->sign < 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 1: arg 4: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m5->top != 0 && m5->p[m5->top - 1] == 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 1: arg 4: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l5, m5)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 1: arg 4: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m5), LFMT(l5)); fail=1; } if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 1: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m2)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 1: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m2), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mptarget(m5); mpdiv_(m2, m3, m3, m5); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 2: arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m5->top == 0 && m5->sign < 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 2: arg 4: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m5->top != 0 && m5->p[m5->top - 1] == 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 2: arg 4: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l5, m5)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 2: arg 4: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m5), LFMT(l5)); fail=1; } if(m3->top == 0 && m3->sign < 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 2: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m3->top != 0 && m3->p[m3->top - 1] == 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 2: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m3)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 3 and 2: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m3), LFMT(l4)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mptarget(m5); mpdiv_(m2, m3, m4, m2); if(!ldmpeq(l3, m3)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 1: arg 2: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 1: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 1: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 1: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m4), LFMT(l4)); fail=1; } if(m2->top == 0 && m2->sign < 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 1: arg 4: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m2->top != 0 && m2->p[m2->top - 1] == 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 1: arg 4: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l5, m2)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 1: arg 4: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m2), LFMT(l5)); fail=1; } ldtomp(l2, m2); ldtomp(l3, m3); mptarget(m4); mptarget(m5); mpdiv_(m2, m3, m4, m3); if(!ldmpeq(l2, m2)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 2: arg 1: input corrupted\n", LFMT(l2), LFMT(l3)); fail=1; } if(m4->top == 0 && m4->sign < 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 2: arg 3: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m4->top != 0 && m4->p[m4->top - 1] == 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 2: arg 3: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l4, m4)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 2: arg 3: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m4), LFMT(l4)); fail=1; } if(m3->top == 0 && m3->sign < 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 2: arg 4: got -0, shouldn't happen\n", LFMT(l2), LFMT(l3)); fail=1; }else if(m3->top != 0 && m3->p[m3->top - 1] == 0){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 2: arg 4: got denormalised result\n", LFMT(l2), LFMT(l3)); fail=1; }else if(!ldmpeq(l5, m3)){ fprintf(stderr, "FAIL: mpdiv_(%s, %s, out, out): alias 4 and 2: arg 4: got %s, expected %s\n", LFMT(l2), LFMT(l3), MFMT(m3), LFMT(l5)); fail=1; } } } ldfree(l2); mpfree(m2); ldfree(l3); mpfree(m3); ldfree(l4); mpfree(m4); ldfree(l5); mpfree(m5); if(!fail) fprintf(stderr, "mpdiv_: passed\n"); } void tests(void) { testcmp(); testmagcmp(); testadd(); testsub(); testmagadd(); testmagsub(); testand(); testbic(); testor(); testxor(); testnot(); testleft(); testright(); testasr(); testdiv_(); }