Re-integrate export-optimization branch.
[ardour.git] / libs / audiographer / tests / identity_vertex_test.cc
1 #include "utils.h"
2 #include "audiographer/identity_vertex.h"
3
4 using namespace AudioGrapher;
5
6 class IdentityVertexTest : public CppUnit::TestFixture
7 {
8   CPPUNIT_TEST_SUITE (IdentityVertexTest);
9   CPPUNIT_TEST (testProcess);
10   CPPUNIT_TEST (testRemoveOutput);
11   CPPUNIT_TEST (testClearOutputs);
12   CPPUNIT_TEST_SUITE_END ();
13
14   public:
15         void setUp()
16         {
17                 frames = 128;
18                 random_data = TestUtils::init_random_data(frames);
19                 
20                 zero_data = new float[frames];
21                 memset (zero_data, 0, frames * sizeof(float));
22
23                 sink_a.reset (new VectorSink<float>());
24                 sink_b.reset (new VectorSink<float>());
25         }
26
27         void tearDown()
28         {
29                 delete [] random_data;
30                 delete [] zero_data;
31         }
32
33         void testProcess()
34         {
35                 vertex.reset (new IdentityVertex<float>());
36                 vertex->add_output (sink_a);
37                 vertex->add_output (sink_b);
38                 
39                 nframes_t frames_output = 0;
40                 
41                 ProcessContext<float> c (random_data, frames, 1);
42                 vertex->process (c);
43                 
44                 frames_output = sink_a->get_data().size();
45                 CPPUNIT_ASSERT_EQUAL (frames, frames_output);
46                 
47                 frames_output = sink_b->get_data().size();
48                 CPPUNIT_ASSERT_EQUAL (frames, frames_output);
49                 
50                 CPPUNIT_ASSERT (TestUtils::array_equals (random_data, sink_a->get_array(), frames));
51                 CPPUNIT_ASSERT (TestUtils::array_equals (random_data, sink_b->get_array(), frames));
52         }
53         
54         void testRemoveOutput()
55         {
56                 vertex.reset (new IdentityVertex<float>());
57                 vertex->add_output (sink_a);
58                 vertex->add_output (sink_b);
59                 
60                 ProcessContext<float> c (random_data, frames, 1);
61                 vertex->process (c);
62                 
63                 vertex->remove_output (sink_a);
64                 ProcessContext<float> zc (zero_data, frames, 1);
65                 vertex->process (zc);
66                 
67                 CPPUNIT_ASSERT (TestUtils::array_equals (random_data, sink_a->get_array(), frames));
68                 CPPUNIT_ASSERT (TestUtils::array_equals (zero_data, sink_b->get_array(), frames));
69         }
70         
71         void testClearOutputs()
72         {
73                 vertex.reset (new IdentityVertex<float>());
74                 vertex->add_output (sink_a);
75                 vertex->add_output (sink_b);
76                 
77                 ProcessContext<float> c (random_data, frames, 1);
78                 vertex->process (c);
79                 
80                 vertex->clear_outputs ();
81                 ProcessContext<float> zc (zero_data, frames, 1);
82                 vertex->process (zc);
83                 
84                 CPPUNIT_ASSERT (TestUtils::array_equals (random_data, sink_a->get_array(), frames));
85                 CPPUNIT_ASSERT (TestUtils::array_equals (random_data, sink_b->get_array(), frames));
86         }
87
88   private:
89         boost::shared_ptr<IdentityVertex<float> > vertex;
90         boost::shared_ptr<VectorSink<float> > sink_a;
91         boost::shared_ptr<VectorSink<float> > sink_b;
92
93         float * random_data;
94         float * zero_data;
95         nframes_t frames;
96 };
97
98 CPPUNIT_TEST_SUITE_REGISTRATION (IdentityVertexTest);
99