base/asm-common.h (x86), and knock-on: Add macros for full-size regs.
[catacomb] / utils / qfarith-test
index 3904d42..ff0782c 100755 (executable)
@@ -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)