add test_add fp16
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 8 Jul 2019 11:19:45 +0000 (12:19 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 8 Jul 2019 11:19:45 +0000 (12:19 +0100)
src/ieee754/fpadd/test/add_data16.py [new file with mode: 0644]
src/ieee754/fpadd/test/test_fpadd_pipe_16.py [new file with mode: 0644]
src/ieee754/fpcommon/test/case_gen.py
src/ieee754/fpcommon/test/unit_test_half.py

diff --git a/src/ieee754/fpadd/test/add_data16.py b/src/ieee754/fpadd/test/add_data16.py
new file mode 100644 (file)
index 0000000..07653f4
--- /dev/null
@@ -0,0 +1,18 @@
+def regressions():
+
+    yield  0x7800, 0xff6f
+    yield  0x0000, 0x7c32
+    yield  0x0000, 0x7da9
+    yield  0x0000, 0x7ea0
+    yield  0x7c9a, 0x8000
+    yield  0x7d5e, 0x0000
+    yield  0x8000, 0x7c8c
+    yield  0x8000, 0xfc55
+    yield  0x8000, 0x7e1a
+
+    yield  0x8000, 0xfc01
+    yield  0xfc00, 0x7c00
+    yield  0x8000, 0
+    yield  0, 0
+
+    yield 0x8000, 0
diff --git a/src/ieee754/fpadd/test/test_fpadd_pipe_16.py b/src/ieee754/fpadd/test/test_fpadd_pipe_16.py
new file mode 100644 (file)
index 0000000..3e6273e
--- /dev/null
@@ -0,0 +1,20 @@
+""" test of FPADDMuxInOut
+"""
+
+from ieee754.fpadd.pipeline import (FPADDMuxInOut,)
+from ieee754.fpcommon.test.case_gen import run_pipe_fp
+from ieee754.fpcommon.test import unit_test_half
+from ieee754.fpadd.test.add_data16 import regressions
+
+from sfpy import Float16
+from operator import add
+
+
+def test_pipe_fp16():
+    dut = FPADDMuxInOut(16, 4)
+    run_pipe_fp(dut, 16, "add", unit_test_half, Float16,
+                   regressions, add, 10)
+
+
+if __name__ == '__main__':
+    test_pipe_fp16()
index 441b093e45c5f58056a49dae5d1587ac81c0dbd5..5a1661a159c6c1167cd6580e23ad60aa6bfc7457 100644 (file)
@@ -25,17 +25,20 @@ def replicate(fixed_num, maxcount):
     else:
         return fixed_num
 
+def get_rval(width):
+    mval = (1<<width)-1
+    return randint(0, mval)
 
 def get_rand1(mod, fixed_num, maxcount, width):
     stimulus_a = replicate(fixed_num, maxcount)
-    stimulus_b = [randint(0, 1<<width) for i in range(maxcount)]
+    stimulus_b = [get_rval(width) for i in range(maxcount)]
     return zip(stimulus_a, stimulus_b)
 
 
 def get_nan_noncan(mod, fixed_num, maxcount, width):
     stimulus_a = replicate(fixed_num, maxcount)
     # non-canonical NaNs.
-    stimulus_b = [mod.set_exponent(randint(0, 1<<width), mod.max_e) \
+    stimulus_b = [mod.set_exponent(get_rval(width), mod.max_e) \
                         for i in range(maxcount)]
     return zip(stimulus_a, stimulus_b)
 
@@ -43,7 +46,7 @@ def get_nan_noncan(mod, fixed_num, maxcount, width):
 def get_n127(mod, fixed_num, maxcount, width):
     stimulus_a = replicate(fixed_num, maxcount)
     # -127
-    stimulus_b = [mod.set_exponent(randint(0, 1<<width), -mod.max_e+1) \
+    stimulus_b = [mod.set_exponent(get_rval(width), -mod.max_e+1) \
                         for i in range(maxcount)]
     return zip(stimulus_a, stimulus_b)
 
@@ -51,7 +54,7 @@ def get_n127(mod, fixed_num, maxcount, width):
 def get_nearly_zero(mod, fixed_num, maxcount, width):
     stimulus_a = replicate(fixed_num, maxcount)
     # nearly zero
-    stimulus_b = [mod.set_exponent(randint(0, 1<<width), -mod.max_e+2) \
+    stimulus_b = [mod.set_exponent(get_rval(width), -mod.max_e+2) \
                         for i in range(maxcount)]
     return zip(stimulus_a, stimulus_b)
 
@@ -59,7 +62,7 @@ def get_nearly_zero(mod, fixed_num, maxcount, width):
 def get_nearly_inf(mod, fixed_num, maxcount, width):
     stimulus_a = replicate(fixed_num, maxcount)
     # nearly inf
-    stimulus_b = [mod.set_exponent(randint(0, 1<<width), mod.max_e-1) \
+    stimulus_b = [mod.set_exponent(get_rval(width), mod.max_e-1) \
                         for i in range(maxcount)]
     return zip(stimulus_a, stimulus_b)
 
@@ -67,7 +70,7 @@ def get_nearly_inf(mod, fixed_num, maxcount, width):
 def get_corner_rand(mod, fixed_num, maxcount, width):
     stimulus_a = replicate(fixed_num, maxcount)
     # random
-    stimulus_b = [randint(0, 1<<width) for i in range(maxcount)]
+    stimulus_b = [get_rval(width) for i in range(maxcount)]
     return zip(stimulus_a, stimulus_b)
 
 
index 146d9eca9944db51b65e6bf76fedf456a3ec7e6b..a0a35cb2eba9ae7bab5d915ea68e11ce828b119f 100644 (file)
@@ -39,7 +39,7 @@ def match(x, y):
         )
 
 def create(s, e, m):
-    return set_exponent((s<<15) | m, x)
+    return set_exponent((s<<15) | m, e)
 
 def inf(s):
     return create(s, 16, 0)