diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/block_test.py | 96 | ||||
-rw-r--r-- | tests/demo_blocks.py | 57 |
2 files changed, 71 insertions, 82 deletions
diff --git a/tests/block_test.py b/tests/block_test.py index c62ea6f..43c764e 100644 --- a/tests/block_test.py +++ b/tests/block_test.py @@ -2,59 +2,7 @@ import unittest import gras import numpy - -class NullSource(gras.Block): - def __init__(self): - gras.Block.__init__(self, 'NullSource') - self.set_output_signature([numpy.int32]) - - def work(self, ins, outs): - self.mark_done() - -class NullSink(gras.Block): - def __init__(self): - gras.Block.__init__(self, 'NullSink') - self.set_input_signature([numpy.int32]) - - def work(self, ins, outs): - self.mark_done() - -class VectorSource(gras.Block): - def __init__(self, out_sig, vec): - gras.Block.__init__(self, - name='VectorSource', - in_sig=None, - out_sig=[out_sig], - ) - self._vec = vec - - def work(self, ins, outs): - print 'vector source work' - num = min(len(outs[0]), len(self._vec)) - outs[0][:num] = self._vec[:num] - self.produce(0, num) - self._vec = self._vec[num:] - if not self._vec: - self.mark_done() - print 'vector source work done' - -class VectorSink(gras.Block): - def __init__(self, in_sig): - gras.Block.__init__(self, - name='VectorSink', - in_sig=[in_sig], - out_sig=None, - ) - self._vec = list() - - def get_vector(self): - return self._vec - - def work(self, ins, outs): - print 'vector sink work' - self._vec.extend(ins[0].copy()) - self.consume(0, len(ins[0])) - print 'vector sink work done' +from demo_blocks import * class BlockTest(unittest.TestCase): @@ -62,43 +10,27 @@ class BlockTest(unittest.TestCase): vec_source = VectorSource(numpy.uint32, [0, 9, 8, 7, 6]) vec_sink = VectorSink(numpy.uint32) - print 'make tb' tb = gras.TopBlock() - print 'connect' tb.connect(vec_source, vec_sink) - print 'run' tb.run() - print 'done run' + tb.commit() tb = None - print vec_sink.get_vector() - vec_source = None - vec_sink = None - - def test_make_block(self): - #return - null_src = NullSource() - - null_sink = NullSink() + self.assertEqual(vec_sink.get_vector(), (0, 9, 8, 7, 6)) + def test_add_f32(self): tb = gras.TopBlock() - - print 'connect...' - tb.connect(null_src, null_sink) - print 'run' - - print 'py start' - tb.start() - import time; time.sleep(1) - print 'py stop' - tb.stop() - print 'py wait' - tb.wait() - print 'ok' - - tb.disconnect(null_src, null_sink) + src0 = VectorSource(numpy.float32, [1, 3, 5, 7, 9]) + src1 = VectorSource(numpy.float32, [0, 2, 4, 6, 8]) + adder = add_2x(numpy.float32) + sink = VectorSink(numpy.float32) + tb.connect((src0, 0), (adder, 0)) + tb.connect((src1, 0), (adder, 1)) + tb.connect(adder, sink) + tb.run() tb.commit() - print 'done' + tb = None + self.assertEqual(sink.get_vector(), (1, 5, 9, 13, 17)) if __name__ == '__main__': unittest.main() diff --git a/tests/demo_blocks.py b/tests/demo_blocks.py new file mode 100644 index 0000000..3a5d5cb --- /dev/null +++ b/tests/demo_blocks.py @@ -0,0 +1,57 @@ +import gras +import numpy + +class add_2x(gras.Block): + def __init__(self, sig): + gras.Block.__init__(self, + name = "add 2x", + in_sig = [sig, sig], + out_sig = [sig], + ) + + def work(self, ins, outs): + nitems = min(*map(len, (ins[0], ins[1], outs[0]))) + outs[0][:nitems] = ins[0][:nitems] + ins[1][:nitems] + self.consume(0, nitems) + self.consume(1, nitems) + self.produce(0, nitems) + +class NullSource(gras.Block): + def __init__(self, out_sig): + gras.Block.__init__(self, 'NullSource', out_sig=[out_sig]) + + def work(self, ins, outs): + outs[0][:] = numpy.zeros(len(outs[0])) + self.produce(0, len(outs[0])) + +class NullSink(gras.Block): + def __init__(self, in_sig): + gras.Block.__init__(self, 'NullSink', in_sig=[in_sig]) + + def work(self, ins, outs): + self.consume(0, len(ins[0])) + +class VectorSource(gras.Block): + def __init__(self, out_sig, vec): + gras.Block.__init__(self, name='VectorSource', out_sig=[out_sig]) + self._vec = vec + + def work(self, ins, outs): + num = min(len(outs[0]), len(self._vec)) + outs[0][:num] = self._vec[:num] + self.produce(0, num) + self._vec = self._vec[num:] + if not self._vec: + self.mark_done() + +class VectorSink(gras.Block): + def __init__(self, in_sig): + gras.Block.__init__(self, name='VectorSink', in_sig=[in_sig]) + self._vec = list() + + def get_vector(self): + return tuple(self._vec) + + def work(self, ins, outs): + self._vec.extend(ins[0].copy()) + self.consume(0, len(ins[0])) |