@@ -583,6 +583,92 @@ TYPED_TEST_P(OperationsTest, SyncedIterate2)
583583 }
584584}
585585
586+ // /////////////////////////////////////////////////////////////////////////////////////////////////
587+ // / EventFilter1
588+ // /////////////////////////////////////////////////////////////////////////////////////////////////
589+ TYPED_TEST_P (OperationsTest, SyncedEventFilter1)
590+ {
591+ using D = typename SyncedEventFilter1::MyDomain;
592+
593+ using std::string;
594+
595+ std::queue<string> results;
596+
597+ auto in = MakeEventSource<D,string>();
598+
599+ auto sig1 = MakeVar<D>(1338 );
600+ auto sig2 = MakeVar<D>(1336 );
601+
602+ auto filtered = Filter (
603+ in,
604+ With (sig1, sig2),
605+ [] (const string& s, int sig1, int sig2) {
606+ return s == " Hello World" && sig1 > sig2;
607+ });
608+
609+
610+ Observe (filtered, [&] (const string& s)
611+ {
612+ results.push (s);
613+ });
614+
615+ in << string (" Hello Worlt" ) << string (" Hello World" ) << string (" Hello Vorld" );
616+ sig1 <<= 1335 ;
617+ in << string (" Hello Vorld" );
618+
619+ ASSERT_FALSE (results.empty ());
620+ ASSERT_EQ (results.front (), " Hello World" );
621+ results.pop ();
622+
623+ ASSERT_TRUE (results.empty ());
624+ }
625+
626+ // /////////////////////////////////////////////////////////////////////////////////////////////////
627+ // / EventTransform1
628+ // /////////////////////////////////////////////////////////////////////////////////////////////////
629+ TYPED_TEST_P (OperationsTest, SyncedEventTransform1)
630+ {
631+ using D = typename SyncedEventTransform1::MyDomain;
632+
633+ using std::string;
634+
635+ std::vector<string> results;
636+
637+ auto in1 = MakeEventSource<D,string>();
638+ auto in2 = MakeEventSource<D,string>();
639+
640+ auto merged = Merge (in1, in2);
641+
642+ auto first = MakeVar<D>(string (" Ace" ));
643+ auto last = MakeVar<D>(string (" McSteele" ));
644+
645+ auto transformed = Transform (
646+ merged,
647+ With (first, last),
648+ [] (string s, const string& first, const string& last) -> string {
649+ std::transform (s.begin (), s.end (), s.begin (), ::toupper);
650+ s += string (" , " ) + first + string (" " ) + last;
651+ return s;
652+ });
653+
654+ Observe (transformed, [&] (const string& s) {
655+ results.push_back (s);
656+ });
657+
658+ in1 << string (" Hello Worlt" ) << string (" Hello World" );
659+
660+ D::DoTransaction ([&] {
661+ in2 << string (" Hello Vorld" );
662+ first.Set (string (" Alice" ));
663+ last.Set (string (" Anderson" ));
664+ });
665+
666+ ASSERT_EQ (results.size (), 3 );
667+ ASSERT_TRUE (std::find (results.begin (), results.end (), " HELLO WORLT, Ace McSteele" ) != results.end ());
668+ ASSERT_TRUE (std::find (results.begin (), results.end (), " HELLO WORLD, Ace McSteele" ) != results.end ());
669+ ASSERT_TRUE (std::find (results.begin (), results.end (), " HELLO VORLD, Alice Anderson" ) != results.end ());
670+ }
671+
586672// /////////////////////////////////////////////////////////////////////////////////////////////////
587673REGISTER_TYPED_TEST_CASE_P
588674(
@@ -598,7 +684,9 @@ REGISTER_TYPED_TEST_CASE_P
598684 IterateByRef2,
599685 SyncedTransform1,
600686 SyncedIterate1,
601- SyncedIterate2
687+ SyncedIterate2,
688+ SyncedEventFilter1,
689+ SyncedEventTransform1
602690);
603691
604692} // ~namespace
0 commit comments