Line data Source code
1 : #include <iostream>
2 : #include <iow/io/io_base.hpp>
3 : #include <iow/io/basic/aspect.hpp>
4 :
5 : #include <fas/testing.hpp>
6 :
7 :
8 : struct _start_;
9 3 : struct ad_start
10 : {
11 : template<typename T>
12 1 : void operator() (T& t) const
13 : {
14 1 : t.virt();
15 1 : t.started = true;
16 1 : }
17 : };
18 :
19 : struct _init_;
20 3 : struct ad_init
21 : {
22 : template<typename T>
23 2 : void operator() (T& t, int val) const
24 : {
25 2 : t.value = val;
26 2 : t.virt();
27 2 : }
28 : };
29 :
30 : struct _stop_;
31 3 : struct ad_stop
32 : {
33 : template<typename T>
34 1 : void operator() (T& t) const
35 : {
36 1 : t.started = false;
37 1 : t.virt();
38 1 : }
39 : };
40 :
41 : struct _reset_;
42 3 : struct ad_reset
43 : {
44 : template<typename T>
45 4 : void operator() (T& t) const
46 : {
47 4 : ++t.resetval;
48 4 : t.virt();
49 4 : }
50 : };
51 :
52 3 : class iobase
53 : : public ::iow::io::io_base< fas::aspect<
54 : ::iow::io::basic::aspect< std::recursive_mutex >::advice_list,
55 : fas::advice<_start_, ad_start>,
56 : fas::advice<_init_, ad_init>,
57 : fas::advice<_stop_, ad_stop>,
58 : fas::advice<_reset_, ad_reset>,
59 : fas::group< ::iow::io::_initialize_, _init_>,
60 : fas::group< ::iow::io::_after_stop_, _stop_>,
61 : fas::group< ::iow::io::_after_reset_, _reset_>,
62 : fas::group< ::iow::io::_after_start_, _start_>,
63 : fas::type< ::iow::io::_options_type_, fas::empty_type >
64 : > >
65 : {
66 :
67 : public:
68 3 : virtual ~iobase() {}
69 1 : void start(int val) { this->start_(*this, val ); }
70 1 : void stop() { this->stop_(*this); }
71 3 : void reset() { this->reset_(*this); }
72 1 : void reconfigure(int val) { this->reconfigure_(*this, val ); }
73 8 : virtual void virt() { ++virtval ;}
74 : int value = -1;
75 : int resetval = 0;
76 : int virtval = 0;
77 : bool started = false;
78 :
79 : };
80 :
81 3 : UNIT(init, "")
82 : {
83 : using namespace fas::testing;
84 1 : iobase io;
85 1 : io.reconfigure( 10 );
86 1 : t << is_true< assert >(io.virtval==1) << FAS_TESTING_FILE_LINE;
87 1 : t << is_true< assert >(io.resetval==0) << FAS_TESTING_FILE_LINE;
88 1 : t << is_false< assert >(io.started) << FAS_TESTING_FILE_LINE;
89 1 : t << is_true< assert >(io.value==10) << FAS_TESTING_FILE_LINE;
90 1 : t << is_false< assert >( io.status() ) << FAS_TESTING_FILE_LINE;
91 1 : t << is_true< assert >(io.get_id()==0) << FAS_TESTING_FILE_LINE;
92 1 : io.reset();
93 1 : t << is_true< assert >(io.virtval==2) << FAS_TESTING_FILE_LINE;
94 1 : t << is_true< assert >(io.resetval==1) << FAS_TESTING_FILE_LINE;
95 1 : t << is_false< assert >(io.started) << FAS_TESTING_FILE_LINE;
96 1 : t << is_true< assert >(io.value==10) << FAS_TESTING_FILE_LINE;
97 1 : t << is_false< assert >( io.status() ) << FAS_TESTING_FILE_LINE;
98 1 : t << is_true< assert >(io.get_id()==0) << FAS_TESTING_FILE_LINE;
99 1 : }
100 :
101 :
102 3 : UNIT(start, "")
103 : {
104 : using namespace fas::testing;
105 : using namespace fas::testing;
106 1 : iobase io;
107 1 : io.start( 10 );
108 1 : t << is_true< assert >(io.virtval==2) << FAS_TESTING_FILE_LINE;
109 1 : t << is_true< assert >(io.resetval==0) << FAS_TESTING_FILE_LINE;
110 1 : t << is_true< assert >(io.started) << FAS_TESTING_FILE_LINE;
111 1 : t << is_true< assert >(io.value==10) << FAS_TESTING_FILE_LINE;
112 1 : t << is_true< assert >( io.status() ) << FAS_TESTING_FILE_LINE;
113 1 : t << is_true< assert >(io.get_id()==1) << FAS_TESTING_FILE_LINE;
114 1 : io.stop();
115 1 : t << is_true< assert >(io.virtval==4) << FAS_TESTING_FILE_LINE;
116 1 : t << is_true< assert >(io.resetval==1) << FAS_TESTING_FILE_LINE;
117 1 : t << is_false< assert >(io.started) << FAS_TESTING_FILE_LINE;
118 1 : t << is_true< assert >(io.value==10) << FAS_TESTING_FILE_LINE;
119 1 : t << is_false< assert >( io.status() ) << FAS_TESTING_FILE_LINE;
120 1 : t << is_true< assert >(io.get_id()==1) << FAS_TESTING_FILE_LINE;
121 1 : }
122 :
123 :
124 3 : UNIT(owner, "")
125 : {
126 : using namespace fas::testing;
127 :
128 1 : iobase io;
129 1 : int value = 0;
130 3 : auto test1= io.wrap([&value](int val) { value = val; }, nullptr);
131 :
132 1 : test1(10);
133 1 : t << is_true< assert >(value==10) << value << FAS_TESTING_FILE_LINE;
134 1 : io.reset();
135 1 : test1(20);
136 1 : t << is_true< assert >(value==10) << value << FAS_TESTING_FILE_LINE;
137 :
138 4 : auto test2= io.wrap([&value](int val) { value = val; }, [&value](int val) { value = val*-1; });
139 :
140 1 : test2(30);
141 1 : t << is_true< assert >(value==30) << value << FAS_TESTING_FILE_LINE;
142 1 : io.reset();
143 1 : test2(40);
144 2 : t << is_true< assert >(value==-40) << value << FAS_TESTING_FILE_LINE;
145 :
146 1 : }
147 :
148 1 : BEGIN_SUITE(io_base,"")
149 : ADD_UNIT(init)
150 : ADD_UNIT(start)
151 : ADD_UNIT(owner)
152 7 : END_SUITE(io_base)
153 :
|