Skip to content

Commit 33ba9c3

Browse files
committed
Added test cases for EventRange Iterate.
1 parent 3ff8cdc commit 33ba9c3

1 file changed

Lines changed: 222 additions & 0 deletions

File tree

‎tests/src/OperationsTest.h‎

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,226 @@ TYPED_TEST_P(OperationsTest, SyncedIterate2)
586586
}
587587
}
588588

589+
///////////////////////////////////////////////////////////////////////////////////////////////////
590+
/// SyncedIterate3 test (event range)
591+
///////////////////////////////////////////////////////////////////////////////////////////////////
592+
TYPED_TEST_P(OperationsTest, SyncedIterate3)
593+
{
594+
using D = typename SyncedIterate3::MyDomain;
595+
596+
auto in1 = MakeVar<D>(1);
597+
auto in2 = MakeVar<D>(1);
598+
599+
auto op1 = in1 + in2;
600+
auto op2 = (in1 + in2) * 10;
601+
602+
auto src1 = MakeEventSource<D>();
603+
auto src2 = MakeEventSource<D,int>();
604+
605+
auto out1 = Iterate(
606+
src1,
607+
make_tuple(0,0),
608+
With(op1,op2),
609+
[] (EventRange<Token> range, const tuple<int,int>& t, int op1, int op2) {
610+
return make_tuple(
611+
get<0>(t) + (op1 * range.Size()),
612+
get<1>(t) + (op2 * range.Size()));
613+
});
614+
615+
auto out2 = Iterate(
616+
src2,
617+
make_tuple(0,0,0),
618+
With(op1,op2),
619+
[] (EventRange<int> range, const tuple<int,int,int>& t, int op1, int op2) {
620+
int sum = 0;
621+
for (const auto& e : range)
622+
sum += e;
623+
624+
return make_tuple(
625+
get<0>(t) + sum,
626+
get<1>(t) + (op1 * range.Size()),
627+
get<2>(t) + (op2 * range.Size()));
628+
});
629+
630+
int obsCount1 = 0;
631+
int obsCount2 = 0;
632+
633+
{
634+
auto obs1 = Observe(out1, [&] (const tuple<int,int>& t) {
635+
++obsCount1;
636+
637+
ASSERT_EQ(get<0>(t), 33);
638+
ASSERT_EQ(get<1>(t), 330);
639+
});
640+
641+
auto obs2 = Observe(out2, [&] (const tuple<int,int,int>& t) {
642+
++obsCount2;
643+
644+
ASSERT_EQ(get<0>(t), 42);
645+
ASSERT_EQ(get<1>(t), 33);
646+
ASSERT_EQ(get<2>(t), 330);
647+
});
648+
649+
in1 <<= 22;
650+
in2 <<= 11;
651+
652+
src1.Emit();
653+
src2.Emit(42);
654+
655+
ASSERT_EQ(obsCount1, 1);
656+
ASSERT_EQ(obsCount2, 1);
657+
658+
obs1.Detach();
659+
obs2.Detach();
660+
}
661+
662+
{
663+
auto obs1 = Observe(out1, [&] (const tuple<int,int>& t) {
664+
++obsCount1;
665+
666+
ASSERT_EQ(get<0>(t), 33 + 330);
667+
ASSERT_EQ(get<1>(t), 330 + 3300);
668+
});
669+
670+
auto obs2 = Observe(out2, [&] (const tuple<int,int,int>& t) {
671+
++obsCount2;
672+
673+
ASSERT_EQ(get<0>(t), 42 + 420);
674+
ASSERT_EQ(get<1>(t), 33 + 330);
675+
ASSERT_EQ(get<2>(t), 330 + 3300);
676+
});
677+
678+
in1 <<= 220;
679+
in2 <<= 110;
680+
681+
src1.Emit();
682+
src2.Emit(420);
683+
684+
ASSERT_EQ(obsCount1, 2);
685+
ASSERT_EQ(obsCount2, 2);
686+
687+
obs1.Detach();
688+
obs2.Detach();
689+
}
690+
}
691+
692+
///////////////////////////////////////////////////////////////////////////////////////////////////
693+
/// SyncedIterate4 test (event range, by ref)
694+
///////////////////////////////////////////////////////////////////////////////////////////////////
695+
TYPED_TEST_P(OperationsTest, SyncedIterate4)
696+
{
697+
using D = typename SyncedIterate4::MyDomain;
698+
699+
auto in1 = MakeVar<D>(1);
700+
auto in2 = MakeVar<D>(1);
701+
702+
auto op1 = in1 + in2;
703+
auto op2 = (in1 + in2) * 10;
704+
705+
auto src1 = MakeEventSource<D>();
706+
auto src2 = MakeEventSource<D,int>();
707+
708+
auto out1 = Iterate(
709+
src1,
710+
vector<int>{},
711+
With(op1,op2),
712+
[] (EventRange<Token> range, vector<int>& v, int op1, int op2) -> void {
713+
for (const auto& e : range)
714+
{
715+
v.push_back(op1);
716+
v.push_back(op2);
717+
}
718+
});
719+
720+
auto out2 = Iterate(
721+
src2,
722+
vector<int>{},
723+
With(op1,op2),
724+
[] (EventRange<int> range, vector<int>& v, int op1, int op2) -> void {
725+
for (const auto& e : range)
726+
{
727+
v.push_back(e);
728+
v.push_back(op1);
729+
v.push_back(op2);
730+
}
731+
});
732+
733+
int obsCount1 = 0;
734+
int obsCount2 = 0;
735+
736+
{
737+
auto obs1 = Observe(out1, [&] (const vector<int>& v) {
738+
++obsCount1;
739+
740+
ASSERT_EQ(v.size(), 2);
741+
742+
ASSERT_EQ(v[0], 33);
743+
ASSERT_EQ(v[1], 330);
744+
});
745+
746+
auto obs2 = Observe(out2, [&] (const vector<int>& v) {
747+
++obsCount2;
748+
749+
ASSERT_EQ(v.size(), 3);
750+
751+
ASSERT_EQ(v[0], 42);
752+
ASSERT_EQ(v[1], 33);
753+
ASSERT_EQ(v[2], 330);
754+
});
755+
756+
in1 <<= 22;
757+
in2 <<= 11;
758+
759+
src1.Emit();
760+
src2.Emit(42);
761+
762+
ASSERT_EQ(obsCount1, 1);
763+
ASSERT_EQ(obsCount2, 1);
764+
765+
obs1.Detach();
766+
obs2.Detach();
767+
}
768+
769+
{
770+
auto obs1 = Observe(out1, [&] (const vector<int>& v) {
771+
++obsCount1;
772+
773+
ASSERT_EQ(v.size(), 4);
774+
775+
ASSERT_EQ(v[0], 33);
776+
ASSERT_EQ(v[1], 330);
777+
ASSERT_EQ(v[2], 330);
778+
ASSERT_EQ(v[3], 3300);
779+
});
780+
781+
auto obs2 = Observe(out2, [&] (const vector<int>& v) {
782+
++obsCount2;
783+
784+
ASSERT_EQ(v.size(), 6);
785+
786+
ASSERT_EQ(v[0], 42);
787+
ASSERT_EQ(v[1], 33);
788+
ASSERT_EQ(v[2], 330);
789+
790+
ASSERT_EQ(v[3], 420);
791+
ASSERT_EQ(v[4], 330);
792+
ASSERT_EQ(v[5], 3300);
793+
});
794+
795+
in1 <<= 220;
796+
in2 <<= 110;
797+
798+
src1.Emit();
799+
src2.Emit(420);
800+
801+
ASSERT_EQ(obsCount1, 2);
802+
ASSERT_EQ(obsCount2, 2);
803+
804+
obs1.Detach();
805+
obs2.Detach();
806+
}
807+
}
808+
589809
///////////////////////////////////////////////////////////////////////////////////////////////////
590810
/// EventFilter1
591811
///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -688,6 +908,8 @@ REGISTER_TYPED_TEST_CASE_P
688908
SyncedTransform1,
689909
SyncedIterate1,
690910
SyncedIterate2,
911+
SyncedIterate3,
912+
SyncedIterate4,
691913
SyncedEventFilter1,
692914
SyncedEventTransform1
693915
);

0 commit comments

Comments
 (0)