@@ -17,6 +17,93 @@ public function setUp(): void
1717 Manager::getInstance ()->deleteAll ();
1818 }
1919
20+ public function testMultiFilter ()
21+ {
22+ // first map
23+ $ innerTable1 = new DataTable ();
24+ $ innerTable1 ->addRowsFromSimpleArray ([
25+ ['label ' => '2020-03-04.1 ' , 'value ' => 1 ],
26+ ]);
27+ $ innerTable2 = new DataTable ();
28+ $ innerTable2 ->addRowsFromSimpleArray ([
29+ ['label ' => '2020-03-04.2 ' , 'value ' => 3 ],
30+ ]);
31+ $ innerTable3 = new DataTable ();
32+ $ innerTable3 ->addRowsFromSimpleArray ([
33+ ['label ' => '2020-05-05.3 ' , 'value ' => 5 ],
34+ ]);
35+ $ innerTable4 = new DataTable ();
36+ $ innerTable4 ->addRowsFromSimpleArray ([
37+ ['label ' => '2020-05-05.4 ' , 'value ' => 7 ],
38+ ]);
39+
40+ $ innerMap1 = new DataTable \Map ();
41+ $ innerMap1 ->addTable ($ innerTable1 , '1 ' );
42+ $ innerMap1 ->addTable ($ innerTable2 , '2 ' );
43+
44+ $ innerMap2 = new DataTable \Map ();
45+ $ innerMap2 ->addTable ($ innerTable3 , '3 ' );
46+ $ innerMap2 ->addTable ($ innerTable4 , '4 ' );
47+
48+ $ outerMap1 = new DataTable \Map ();
49+ $ outerMap1 ->addTable ($ innerMap1 , '2020-03-04 ' );
50+ $ outerMap1 ->addTable ($ innerMap2 , '2020-05-05 ' );
51+
52+ // second map
53+ $ innerTable5 = new DataTable ();
54+ $ innerTable5 ->addRowsFromSimpleArray ([
55+ ['label ' => '2020-03-04.1 ' , 'value ' => 9 ],
56+ ]);
57+ $ innerTable6 = new DataTable ();
58+ $ innerTable6 ->addRowsFromSimpleArray ([
59+ ['label ' => '2020-03-04.2 ' , 'value ' => 11 ],
60+ ]);
61+ $ innerTable7 = new DataTable ();
62+ $ innerTable7 ->addRowsFromSimpleArray ([
63+ ['label ' => '2020-05-06.5 ' , 'value ' => 13 ],
64+ ]);
65+ $ innerTable8 = new DataTable ();
66+ $ innerTable8 ->addRowsFromSimpleArray ([
67+ ['label ' => '2020-05-06.4 ' , 'value ' => 15 ],
68+ ]);
69+
70+ $ innerMap3 = new DataTable \Map ();
71+ $ innerMap3 ->addTable ($ innerTable5 , '1 ' );
72+ $ innerMap3 ->addTable ($ innerTable6 , '2 ' );
73+
74+ $ innerMap4 = new DataTable \Map ();
75+ $ innerMap4 ->addTable ($ innerTable7 , '5 ' );
76+ $ innerMap4 ->addTable ($ innerTable8 , '4 ' );
77+
78+ $ outerMap2 = new DataTable \Map ();
79+ $ outerMap2 ->addTable ($ innerMap3 , '2020-03-04 ' );
80+ $ outerMap2 ->addTable ($ innerMap4 , '2020-05-06 ' );
81+
82+ $ visitedLabels = [];
83+ $ result = $ outerMap1 ->multiFilter ([$ outerMap2 ], function ($ table1 , $ table2 ) use (&$ visitedLabels ) {
84+ $ label1 = $ table1 ->getFirstRow ()->getColumn ('label ' );
85+ $ value1 = $ table1 ->getFirstRow ()->getColumn ('value ' );
86+
87+ $ label2 = empty ($ table2 ) ? false : $ table2 ->getFirstRow ()->getColumn ('label ' );
88+ $ value2 = empty ($ table2 ) ? 0 : $ table2 ->getFirstRow ()->getColumn ('value ' );
89+
90+ $ visitedLabels [] = [$ label1 , $ label2 ];
91+
92+ return $ value1 + $ value2 ;
93+ });
94+
95+ $ this ->assertEquals ([
96+ '2020-03-04 ' => ['1 ' => 10 , '2 ' => 14 ],
97+ '2020-05-05 ' => ['3 ' => 5 , '4 ' => 7 ],
98+ ], $ result );
99+ $ this ->assertEquals ([
100+ ['2020-03-04.1 ' , '2020-03-04.1 ' ],
101+ ['2020-03-04.2 ' , '2020-03-04.2 ' ],
102+ ['2020-05-05.3 ' , false ],
103+ ['2020-05-05.4 ' , false ],
104+ ], $ visitedLabels );
105+ }
106+
20107 private function createTestDataTable ()
21108 {
22109 $ result = new DataTable ();
0 commit comments