--- /dev/null
+""" test of FPCVTMuxInOut
+"""
+
+from ieee754.fcvt.pipeline import (FPCVTMuxInOut,)
+from ieee754.fpcommon.test.case_gen import run_pipe_fp
+from ieee754.fpcommon.test import unit_test_single
+from ieee754.fcvt.test.fcvt_data_32_16 import regressions
+
+from sfpy import Float32, Float16
+
+def fcvt_16(x):
+    return Float16(x)
+
+def test_pipe_fp32_16():
+    dut = FPCVTMuxInOut(32, 16, 4)
+    run_pipe_fp(dut, 32, "add", unit_test_single, Float32,
+                regressions, fcvt_16, 10, True)
+
+if __name__ == '__main__':
+    test_pipe_fp32_16()
+
 
 def get_rand1(mod, fixed_num, maxcount, width, single_op=False):
     stimulus_b = [get_rval(width) for i in range(maxcount)]
     if single_op:
-        return stimulus_b
+        yield from stimulus_b
+        return
     stimulus_a = replicate(fixed_num, maxcount)
     yield from zip(stimulus_a, stimulus_b)
     yield from zip(stimulus_b, stimulus_a)
     stimulus_b = [mod.set_exponent(get_rval(width), mod.max_e) \
                         for i in range(maxcount)]
     if single_op:
-        return stimulus_b
+        yield from stimulus_b
+        return
     stimulus_a = replicate(fixed_num, maxcount)
     yield from zip(stimulus_a, stimulus_b)
     yield from zip(stimulus_b, stimulus_a)
     stimulus_b = [mod.set_exponent(get_rval(width), -mod.max_e+1) \
                         for i in range(maxcount)]
     if single_op:
-        return stimulus_b
+        yield from stimulus_b
+        return
     stimulus_a = replicate(fixed_num, maxcount)
     yield from zip(stimulus_a, stimulus_b)
     yield from zip(stimulus_b, stimulus_a)
     stimulus_b = [mod.set_exponent(get_rval(width), -mod.max_e+2) \
                         for i in range(maxcount)]
     if single_op:
-        return stimulus_b
+        yield from stimulus_b
+        return
     stimulus_a = replicate(fixed_num, maxcount)
     yield from zip(stimulus_a, stimulus_b)
     yield from zip(stimulus_b, stimulus_a)
     stimulus_b = [mod.set_exponent(get_rval(width), mod.max_e-1) \
                         for i in range(maxcount)]
     if single_op:
-        return stimulus_b
+        yield from stimulus_b
+        return
     stimulus_a = replicate(fixed_num, maxcount)
     yield from zip(stimulus_a, stimulus_b)
     yield from zip(stimulus_b, stimulus_a)
     # random
     stimulus_b = [get_rval(width) for i in range(maxcount)]
     if single_op:
-        return stimulus_b
+        yield from stimulus_b
+        return
     stimulus_a = replicate(fixed_num, maxcount)
     yield from zip(stimulus_a, stimulus_b)
     yield from zip(stimulus_b, stimulus_a)
                                 self.count, self.single_op)
 
     def run_cornercases(self):
-        vals = repeat(self.dut.num_rows, get_corner_cases(self.mod))
+        ccs = get_corner_cases(self.mod, self.single_op)
+        vals = repeat(self.dut.num_rows, ccs)
         tname = "test_fp%s_pipe_fp%d_cornercases" % (self.name, self.width)
         runfp(self.dut, self.width, tname, self.fmod, self.fpfn, vals=vals,
               single_op=self.single_op)
 
     def run_regressions(self, regressions_fn):
         vals = repeat(self.dut.num_rows, regressions_fn())
-        print ("regressions", vals)
+        #print ("regressions", self.single_op, vals)
         tname = "test_fp%s_pipe_fp%d_regressions" % (self.name, self.width)
         runfp(self.dut, self.width, tname, self.fmod, self.fpfn, vals=vals,
               single_op=self.single_op)
 
             self.do[muxid] = []
             for i in range(self.tlen):
                 if self.single_op:
-                    (op1, ) = vals.pop(0)
+                    #print ("vals", vals)
+                    op1 = vals.pop(0)
+                    if isinstance(op1, tuple):
+                        assert len(op1) == 1
+                        op1 = op1[0]
                     res = self.fpop(self.fpkls(op1))
                     self.di[muxid][i] = (op1, )
                 else:
     """
     vals = list(vals)
     n_to_repeat = len(vals) % num_rows
+    #print ("repeat", vals)
     return vals + [vals[-1]] * n_to_repeat
 
 
 def pipe_cornercases_repeat(dut, name, mod, fmod, width, fn, cc, fpfn, count,
                             single_op=False):
     for i, fixed_num in enumerate(cc(mod)):
-        vals = fn(mod, fixed_num, count, width)
+        vals = fn(mod, fixed_num, count, width, single_op)
         vals = repeat(dut.num_rows, vals)
+        #print ("repeat", i, fn, single_op, list(vals))
         fmt = "test_pipe_fp%d_%s_cornercases_%d"
         runfp(dut, width, fmt % (width, name, i),
                    fmod, fpfn, vals=vals, single_op=single_op)