Skip to content

Commit 3ddf7fb

Browse files
committed
Added conversion test.
1 parent fe6c046 commit 3ddf7fb

4 files changed

Lines changed: 170 additions & 0 deletions

File tree

project/msvc/CppReactTest.vcxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,14 @@
8383
</Link>
8484
</ItemDefinitionGroup>
8585
<ItemGroup>
86+
<ClInclude Include="..\..\src\test\ConversionTest.h" />
8687
<ClInclude Include="..\..\src\test\EventStreamTest.h" />
8788
<ClInclude Include="..\..\src\test\ObserverTest.h" />
8889
<ClInclude Include="..\..\src\test\SignalTest.h" />
8990
<ClInclude Include="..\..\src\test\TransactionTest.h" />
9091
</ItemGroup>
9192
<ItemGroup>
93+
<ClCompile Include="..\..\src\test\ConversionTest.cpp" />
9294
<ClCompile Include="..\..\src\test\EventStreamTest.cpp" />
9395
<ClCompile Include="..\..\src\test\ObserverTest.cpp" />
9496
<ClCompile Include="..\..\src\test\SignalTest.cpp" />

project/msvc/CppReactTest.vcxproj.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
<ClInclude Include="..\..\src\test\TransactionTest.h">
2828
<Filter>Header Files</Filter>
2929
</ClInclude>
30+
<ClInclude Include="..\..\src\test\ConversionTest.h">
31+
<Filter>Header Files</Filter>
32+
</ClInclude>
3033
</ItemGroup>
3134
<ItemGroup>
3235
<ClCompile Include="..\..\src\test\EventStreamTest.cpp">
@@ -41,5 +44,8 @@
4144
<ClCompile Include="..\..\src\test\TransactionTest.cpp">
4245
<Filter>Source Files</Filter>
4346
</ClCompile>
47+
<ClCompile Include="..\..\src\test\ConversionTest.cpp">
48+
<Filter>Source Files</Filter>
49+
</ClCompile>
4450
</ItemGroup>
4551
</Project>

src/test/ConversionTest.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include "ConversionTest.h"
2+
3+
#include "react/propagation/FloodingEngine.h"
4+
#include "react/propagation/PulseCountEngine.h"
5+
#include "react/propagation/TopoSortEngine.h"
6+
#include "react/propagation/SourceSetEngine.h"
7+
#include "react/propagation/TopoSortSTEngine.h"
8+
#include "react/propagation/PulseCountO1Engine.h"
9+
#include "react/propagation/ELMEngine.h"
10+
11+
////////////////////////////////////////////////////////////////////////////////////////
12+
namespace {
13+
14+
using namespace react;
15+
16+
INSTANTIATE_TYPED_TEST_CASE_P(Flooding, ConversionTest, FloodingEngine);
17+
INSTANTIATE_TYPED_TEST_CASE_P(TopoSort, ConversionTest, TopoSortEngine);
18+
INSTANTIATE_TYPED_TEST_CASE_P(PulseCount, ConversionTest, PulseCountEngine);
19+
INSTANTIATE_TYPED_TEST_CASE_P(SourceSet, ConversionTest, SourceSetEngine);
20+
INSTANTIATE_TYPED_TEST_CASE_P(TopoSortST, ConversionTest, TopoSortSTEngine);
21+
INSTANTIATE_TYPED_TEST_CASE_P(PulseCountO1, ConversionTest, PulseCountO1Engine);
22+
INSTANTIATE_TYPED_TEST_CASE_P(ELM, ConversionTest, ELMEngine);
23+
24+
} // ~namespace

src/test/ConversionTest.h

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
#pragma once
2+
3+
#include <queue>
4+
#include <string>
5+
6+
#include "gtest/gtest.h"
7+
8+
#include "react/Conversion.h"
9+
10+
////////////////////////////////////////////////////////////////////////////////////////
11+
namespace {
12+
13+
using namespace react;
14+
using namespace std;
15+
16+
////////////////////////////////////////////////////////////////////////////////////////
17+
/// EventStreamTest fixture
18+
////////////////////////////////////////////////////////////////////////////////////////
19+
template <typename TEngine>
20+
class ConversionTest : public testing::Test
21+
{
22+
public:
23+
REACTIVE_DOMAIN(MyDomain, TEngine);
24+
};
25+
26+
TYPED_TEST_CASE_P(ConversionTest);
27+
28+
////////////////////////////////////////////////////////////////////////////////////////
29+
/// Fold1 test
30+
////////////////////////////////////////////////////////////////////////////////////////
31+
TYPED_TEST_P(ConversionTest, Fold1)
32+
{
33+
auto numSrc = MyDomain::MakeEventSource<int>();
34+
auto numFold = Fold(0, numSrc, [] (int v, int d) {
35+
return v + d;
36+
});
37+
38+
for (auto i=1; i<=100; i++)
39+
numSrc << i;
40+
41+
ASSERT_EQ(numFold(), 5050);
42+
43+
auto charSrc = MyDomain::MakeEventSource<char>();
44+
auto strFold = Fold(string(""), charSrc, [] (string s, char c) {
45+
return s + c;
46+
});
47+
48+
charSrc << 'T' << 'e' << 's' << 't';
49+
50+
ASSERT_EQ(strFold(), "Test");
51+
}
52+
53+
////////////////////////////////////////////////////////////////////////////////////////
54+
/// Fold2 test
55+
////////////////////////////////////////////////////////////////////////////////////////
56+
TYPED_TEST_P(ConversionTest, Fold2)
57+
{
58+
auto src = MyDomain::MakeEventSource<int>();
59+
auto f = Fold(0, src, [] (int v, int d) {
60+
return v + d;
61+
});
62+
63+
int c = 0;
64+
65+
Observe(f, [&] (int v) {
66+
c++;
67+
ASSERT_EQ(v, 5050);
68+
});
69+
70+
{
71+
MyDomain::ScopedTransaction _;
72+
73+
for (auto i=1; i<=100; i++)
74+
src << i;
75+
}
76+
77+
ASSERT_EQ(f(), 5050);
78+
ASSERT_EQ(c, 1);
79+
}
80+
81+
////////////////////////////////////////////////////////////////////////////////////////
82+
/// Iterate1 test
83+
////////////////////////////////////////////////////////////////////////////////////////
84+
TYPED_TEST_P(ConversionTest, Iterate1)
85+
{
86+
auto trigger = MyDomain::MakeEventSource();
87+
88+
{
89+
auto inc = Iterate(0, trigger, Incrementer<int>{});
90+
for (auto i=1; i<=100; i++)
91+
trigger.Emit();
92+
93+
ASSERT_EQ(inc(), 100);
94+
}
95+
96+
{
97+
auto dec = Iterate(100, trigger, Decrementer<int>{});
98+
for (auto i=1; i<=100; i++)
99+
trigger.Emit();
100+
101+
ASSERT_EQ(dec(), 0);
102+
}
103+
}
104+
105+
////////////////////////////////////////////////////////////////////////////////////////
106+
/// Monitor1
107+
////////////////////////////////////////////////////////////////////////////////////////
108+
TYPED_TEST_P(ConversionTest, Monitor1)
109+
{
110+
auto target = MyDomain::MakeSignal();
111+
112+
{
113+
auto inc = Iterate(0, trigger, Incrementer<int>{});
114+
for (auto i=1; i<=100; i++)
115+
trigger.Emit();
116+
117+
ASSERT_EQ(inc(), 100);
118+
}
119+
120+
{
121+
auto dec = Iterate(100, trigger, Decrementer<int>{});
122+
for (auto i=1; i<=100; i++)
123+
trigger.Emit();
124+
125+
ASSERT_EQ(dec(), 0);
126+
}
127+
}
128+
129+
////////////////////////////////////////////////////////////////////////////////////////
130+
REGISTER_TYPED_TEST_CASE_P
131+
(
132+
ConversionTest,
133+
Fold1,
134+
Fold2,
135+
Iterate1
136+
);
137+
138+
} // ~namespace

0 commit comments

Comments
 (0)