X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/ee39a683a2b623a1da0747ec20f20b63470a2db6..6a024d24d97cb5d42c0091571735475b849f59f4:/utils/qfarith-test diff --git a/utils/qfarith-test b/utils/qfarith-test index 3904d42c..ff0782cf 100755 --- a/utils/qfarith-test +++ b/utils/qfarith-test @@ -57,6 +57,7 @@ class Field (object): return FieldElt(me, n) Field.register('f25519', C.MP(0).setbit(255) - 19) +Field.register('fgoldi', C.MP(0).setbit(448) - C.MP(0).setbit(224) - 1) def binop(k, op): x = k.rand(); y = k.rand() @@ -73,6 +74,9 @@ def add(k): binop(k, lambda x, y: x + y) def sub(k): binop(k, lambda x, y: x - y) @test +def neg(k): unop(k, lambda x: -x) + +@test def mul(k): binop(k, lambda x, y: x*y) @test @@ -82,6 +86,15 @@ def sqr(k): unop(k, lambda x: x*x) def inv(k): unop(k, lambda x: x and x.inv() or k(0)) @test +def quosqrt(k): + x = k.rand(); y = k.rand() + yy = +y + u = yy and x/y or k(0) + try: zz = u.sqrt() + except ValueError: print ' %s\n %s\n "" "";' % (x, y) + else: print ' %s\n %s\n %s\n %s;' % (x, y, zz, -zz) + +@test def mulconst(k): x = k.rand() a = C.rand.range(1 << 20) - (1 << 19) @@ -90,6 +103,23 @@ def mulconst(k): def mask(): return C.rand.range(2)*0xffffffff @test +def pick2(k): + x = k.rand(); y = k.rand(); m = mask() + print ' %s\n %s\n 0x%08x\n %s;' % (x, y, m, +(m and x or y)) + +@test +def condneg(k): + x = k.rand(); m = mask() + print ' %s\n 0x%08x\n %s;' % (x, m, x*(m and -1 or +1)) + +@test +def pickn(k): + n = C.rand.range(31) + 1 + v = [k.rand() for i in xrange(n)] + i = C.rand.range(n) + print ' "%s"\n %d\n %s;' % ('\n '.join(map(str, v)), i, +v[i]) + +@test def condswap(k): x = k.rand(); y = k.rand(); m = mask() xx, yy = m and (+y, +x) or (+x, +y)