@@ -34,6 +34,10 @@ using SBG::LIB::Exp;
3434using SBG ::LIB ::Map;
3535using SBG ::LIB ::PWMap;
3636
37+ // //////////////////////////////////////////////////////////////////////////////
38+ // Set operations --------------------------------------------------------------
39+ // //////////////////////////////////////////////////////////////////////////////
40+
3741TEST (DomOrdPWPerf, OrdDifference)
3842{
3943 int N = 10000 ;
@@ -85,7 +89,133 @@ TEST(DomOrdPWPerf, OrdDisjointUnion)
8589 SUCCEED ();
8690}
8791
88- TEST (DomOrdPWPerf, OrdRestrict)
92+ // //////////////////////////////////////////////////////////////////////////////
93+ // PWMap operations ------------------------------------------------------------
94+ // //////////////////////////////////////////////////////////////////////////////
95+
96+ class DomOrdPWPerf : public ::testing::TestWithParam<SBG ::LIB ::NAT > {
97+ protected:
98+ std::pair<PWMap, PWMap> quadraticTest (SBG ::LIB ::NAT map_sz) {
99+ SBG ::LIB ::NAT inter_sz = 100 ;
100+ SBG ::LIB ::NAT set_sz = 1 ;
101+
102+ Interval second_dim (0 , 1 , inter_sz - 1 );
103+ PWMap pw1 = SBG ::LIB ::PW_FACT .createPWMap ();
104+ PWMap pw2 = SBG ::LIB ::PW_FACT .createPWMap ();
105+ for (unsigned int j = 0 ; j < map_sz; ++j) {
106+ Set dom1 = SBG ::LIB ::SET_FACT .createSet ();
107+ Set dom2 = SBG ::LIB ::SET_FACT .createSet ();
108+ SBG ::LIB ::NAT off = j*set_sz*inter_sz;
109+ for (unsigned int h = 0 ; h < set_sz; ++h) {
110+ Interval i1 (off + (h*inter_sz), 1 , off + (h + 1 )*inter_sz - 1 );
111+ SetPiece mdi1;
112+ mdi1.emplaceBack (i1);
113+ mdi1.emplaceBack (second_dim);
114+ dom1.emplaceBack (mdi1);
115+
116+ SBG ::LIB ::NAT off2 = off + inter_sz/2 ;
117+ Interval i2 (off2 + (h*inter_sz), 1 , off2 + (h + 1 )*inter_sz - 1 );
118+ SetPiece mdi2;
119+ mdi2.emplaceBack (i2);
120+ mdi2.emplaceBack (second_dim);
121+ dom2.emplaceBack (mdi2);
122+ }
123+
124+ LExp id;
125+ Exp multidim_id (1 , id);
126+
127+ pw1.emplaceBack (Map (dom1, multidim_id));
128+ pw2.emplaceBack (Map (dom2, multidim_id));
129+ }
130+
131+ return {pw1, pw2};
132+ }
133+ };
134+
135+ TEST_P (DomOrdPWPerf, DomOrdEq)
136+ {
137+ SBG::Eval::setSetFactory (1 );
138+ SBG::Eval::setPWFactory (2 );
139+
140+ SBG ::LIB ::NAT map_sz = GetParam ();
141+ bool result = false ;
142+ if (map_sz < 10000 ) {
143+ auto [pw1, pw2] = quadraticTest (map_sz);
144+
145+ auto start = std::chrono::high_resolution_clock::now ();
146+ result = pw1 == pw2;
147+ auto end = std::chrono::high_resolution_clock::now ();
148+ auto curr_time = std::chrono::duration_cast<std::chrono::milliseconds>(
149+ end - start);
150+ std::cout << curr_time.count () << " \n " ;
151+ }
152+
153+ EXPECT_EQ (result, false );
154+ }
155+
156+ TEST_P (DomOrdPWPerf, DomOrdPlus)
157+ {
158+ SBG::Eval::setSetFactory (1 );
159+ SBG::Eval::setPWFactory (2 );
160+
161+ SBG ::LIB ::NAT map_sz = GetParam ();
162+ auto [pw1, pw2] = quadraticTest (map_sz);
163+
164+ auto start = std::chrono::high_resolution_clock::now ();
165+ pw1 + pw2;
166+ auto end = std::chrono::high_resolution_clock::now ();
167+ auto curr_time = std::chrono::duration_cast<std::chrono::milliseconds>(
168+ end - start);
169+ std::cout << curr_time.count () << " \n " ;
170+
171+ SUCCEED ();
172+ }
173+
174+ INSTANTIATE_TEST_SUITE_P (
175+ DomOrdPWGrowth,
176+ DomOrdPWPerf,
177+ ::testing::Values (1000 , 10000 , 20000 )
178+ );
179+
180+ TEST (DomOrdPWPerfOld, DomOrdDom)
181+ {
182+ SBG ::LIB ::NAT inter_sz = 100 ;
183+ SBG ::LIB ::NAT set_sz = 10 ;
184+ SBG ::LIB ::NAT map_sz = 1000 ;
185+
186+ SBG::Eval::setSetFactory (1 );
187+ SBG::Eval::setPWFactory (2 );
188+
189+ PWMap pw = SBG ::LIB ::PW_FACT .createPWMap ();
190+ for (unsigned int k = 0 ; k < map_sz; ++k) {
191+ LExp le1 (1 , k);
192+ Exp exp;
193+ exp.emplaceBack (le1);
194+ exp.emplaceBack (le1);
195+ exp.emplaceBack (le1);
196+ SBG ::LIB ::NAT map_offset = k*inter_sz*set_sz;
197+ Set s = SBG ::LIB ::SET_FACT .createSet ();
198+ for (unsigned int j = 0 ; j < set_sz; ++j) {
199+ Interval i1 (map_offset + (j*inter_sz) + 1 , 1 , map_offset + (j+1 )*inter_sz);
200+ SetPiece mdi;
201+ mdi.emplaceBack (i1);
202+ mdi.emplaceBack (i1);
203+ mdi.emplaceBack (i1);
204+ s.emplaceBack (mdi);
205+ }
206+ pw.emplaceBack (Map (s, exp));
207+ }
208+
209+ auto start = std::chrono::high_resolution_clock::now ();
210+ pw.dom ();
211+ auto end = std::chrono::high_resolution_clock::now ();
212+ auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
213+ std::cout << " PWL MAP ORDERED DOM TEST elapsed time: " << elapsed.count () << " ms\n " ;
214+
215+ SUCCEED ();
216+ }
217+
218+ TEST (DomOrdPWPerfOld, DomOrdRestrict)
89219{
90220 unsigned int inter_sz = 100 ;
91221 unsigned int set_sz = 10 ;
@@ -127,44 +257,175 @@ TEST(DomOrdPWPerf, OrdRestrict)
127257 SUCCEED ();
128258}
129259
130- TEST (DomOrdPWPerf, OrdDom)
260+ // image
261+
262+ // preImage
263+
264+ // inverse
265+
266+ // composition
267+
268+ // mapInf
269+
270+ // fixedPoints
271+
272+ // concatenation
273+
274+ TEST (DomOrdPWPerfOld, DomOrdCombine)
131275{
132- SBG :: LIB :: NAT inter_sz = 100 ;
133- SBG :: LIB :: NAT set_sz = 10 ;
134- SBG :: LIB :: NAT map_sz = 1000 ;
276+ unsigned int inter_sz = 10000 ;
277+ unsigned int set_sz = 10 ;
278+ unsigned int map_sz = 100 ;
135279
136280 SBG::Eval::setSetFactory (1 );
137281 SBG::Eval::setPWFactory (2 );
138282
139283 PWMap pw = SBG ::LIB ::PW_FACT .createPWMap ();
284+ PWMap pw2 = SBG ::LIB ::PW_FACT .createPWMap ();
285+ for (unsigned int k = map_sz * 25 / 100 ; k < map_sz * 75 / 100 ; ++k) {
286+ LExp le1 (1 , k);
287+ Exp exp;
288+ exp.emplaceBack (le1);
289+ exp.emplaceBack (le1);
290+ exp.emplaceBack (le1);
291+ Set s1 = SBG ::LIB ::SET_FACT .createSet ();
292+ int map_offset = k * inter_sz * set_sz;
293+ for (unsigned int j = 0 ; j < set_sz; ++j) {
294+ Interval i1 (map_offset + (j*inter_sz) + 1 , 1 , map_offset + (j+1 )*inter_sz);
295+ SBG ::LIB ::MultiDimInter mdi;
296+ mdi.emplaceBack (i1);
297+ mdi.emplaceBack (i1);
298+ mdi.emplaceBack (i1);
299+ s1.emplaceBack (mdi);
300+ }
301+ pw.emplaceBack (Map (s1, exp));
302+
303+ }
304+
140305 for (unsigned int k = 0 ; k < map_sz; ++k) {
141306 LExp le1 (1 , k);
142307 Exp exp;
143308 exp.emplaceBack (le1);
144309 exp.emplaceBack (le1);
145310 exp.emplaceBack (le1);
146- SBG ::LIB ::NAT map_offset = k*inter_sz*set_sz;
147- Set s = SBG ::LIB ::SET_FACT .createSet ();
311+ Set s1 = SBG ::LIB ::SET_FACT .createSet ();
312+ int map_offset = k * inter_sz * set_sz;
313+ map_offset += map_offset/2 ;
148314 for (unsigned int j = 0 ; j < set_sz; ++j) {
149315 Interval i1 (map_offset + (j*inter_sz) + 1 , 1 , map_offset + (j+1 )*inter_sz);
150- SetPiece mdi;
316+ SBG :: LIB ::MultiDimInter mdi;
151317 mdi.emplaceBack (i1);
152318 mdi.emplaceBack (i1);
153319 mdi.emplaceBack (i1);
154- s .emplaceBack (mdi);
320+ s1 .emplaceBack (mdi);
155321 }
156- pw.emplaceBack (Map (s, exp));
322+ pw2.emplaceBack (Map (s1, exp));
323+
157324 }
158325
159326 auto start = std::chrono::high_resolution_clock::now ();
160- pw.dom ( );
327+ pw.combine (pw2 );
161328 auto end = std::chrono::high_resolution_clock::now ();
162329 auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
163- std::cout << " PWL MAP ORDERED DOM TEST elapsed time: " << elapsed.count () << " ms\n " ;
330+ std::cout << " PWL MAP ORDERED COMBINE TEST elapsed time: " << elapsed.count () << " ms\n " ;
331+
332+ SUCCEED ();
333+ }
334+
335+ // reduce
336+
337+ // minAdj
338+
339+ TEST (DomOrdPWPerfOld, DomOrdFirstInvSet)
340+ {
341+ unsigned int inter_sz = 10000 ;
342+ unsigned int set_sz = 100 ;
343+ unsigned int map_sz = 100 ;
344+
345+ SBG::Eval::setSetFactory (1 );
346+ SBG::Eval::setPWFactory (0 );
347+
348+ Set s = SBG ::LIB ::SET_FACT .createSet ();
349+ PWMap pw = SBG ::LIB ::PW_FACT .createPWMap ();
350+ for (unsigned int k = 0 ; k < map_sz; ++k) {
351+ LExp le1 (1 , k);
352+ Exp exp;
353+ exp.emplaceBack (le1);
354+ exp.emplaceBack (le1);
355+ exp.emplaceBack (le1);
356+ Set s1 = SBG ::LIB ::SET_FACT .createSet ();
357+ int map_offset = k * inter_sz * set_sz;
358+ for (unsigned int j = 0 ; j < set_sz; ++j) {
359+ Interval i1 (map_offset + (j*inter_sz) + 1 , 1 , map_offset + (j+1 )*inter_sz);
360+ SBG ::LIB ::MultiDimInter mdi;
361+ mdi.emplaceBack (i1);
362+ mdi.emplaceBack (i1);
363+ mdi.emplaceBack (i1);
364+ s1.emplaceBack (mdi);
365+ }
366+ if (k > map_sz * 25 / 100 && k%2 ==0 && k < map_sz * 75 / 100 )
367+ s=s.cup (s1);
368+ pw.emplaceBack (Map (s1, exp));
369+
370+ }
371+
372+ auto start = std::chrono::high_resolution_clock::now ();
373+ pw.firstInv (s);
374+ auto end = std::chrono::high_resolution_clock::now ();
375+ auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
376+ std::cout << " PWL MAP ORDERED FIRSTINV WITH SET TEST elapsed time: " << elapsed.count () << " ms\n " ;
164377
165378 SUCCEED ();
166379}
167380
381+ // equalImage
382+
383+ TEST (DomOrdPWPerf, DomOrdLessImage)
384+ {
385+ unsigned int inter_sz = 100 ;
386+ unsigned int set_sz = 10 ;
387+ unsigned int map_sz = 10000 ;
388+
389+ SBG::Eval::setSetFactory (1 );
390+ SBG::Eval::setPWFactory (2 );
391+
392+ PWMap pw = SBG ::LIB ::PW_FACT .createPWMap ();
393+ for (unsigned int k = 0 ; k < map_sz; ++k) {
394+ LExp le1 (1 , k);
395+ Exp exp;
396+ exp.emplaceBack (le1);
397+ exp.emplaceBack (le1);
398+ exp.emplaceBack (le1);
399+ Set s1 = SBG ::LIB ::SET_FACT .createSet ();
400+ int map_offset = k * inter_sz * set_sz;
401+ for (unsigned int j = 0 ; j < set_sz; ++j) {
402+ Interval i1 (map_offset + (j*inter_sz) + 1 , 1 , map_offset + (j+1 )*inter_sz);
403+ SBG ::LIB ::MultiDimInter mdi;
404+ mdi.emplaceBack (i1);
405+ mdi.emplaceBack (i1);
406+ mdi.emplaceBack (i1);
407+ s1.emplaceBack (mdi);
408+ }
409+ pw.emplaceBack (Map (s1, exp));
410+
411+ }
412+
413+ PWMap sum = pw+pw;
414+ auto start = std::chrono::high_resolution_clock::now ();
415+ pw.lessImage (sum);
416+ auto end = std::chrono::high_resolution_clock::now ();
417+ auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
418+ std::cout << " PWL MAP ORDERED MINMAP TEST elapsed time: " << elapsed.count () << " ms\n " ;
419+
420+ SUCCEED ();
421+ }
422+
423+ // sharedImage
424+
425+ // offsetDom
426+
427+ // compact
428+
168429} // namespace Internal
169430
170431} // namespace Test
0 commit comments