1 #include "execution_test.hh"
2
3 #include "../core.hh"
4 #include "../conductor.hh"
5 #include "../user_data.hh"
6
7 #include "../execution.hh"
8 #include "../tree/structure.hh"
9 #include "../utils/array.hh"
10 #include "../utils/utils.hh"
11 #include "../tree/node_info.hh"
12 #include "../execution_window.hh"
13 #include "../tree/traditional_view.hh"
14
15 #include "../db_handler.hh"
16
17 #include <QDebug>
18 #include <iostream>
19
20 namespace cpprofiler
21 {
22 namespace tests
23 {
24 namespace execution
25 {
26
copy_test(utils::Array<int> arr)27 void copy_test(utils::Array<int> arr)
28 {
29 auto new_arr = arr;
30 }
31
array_test()32 void array_test()
33 {
34
35 utils::Array<int> arr(1);
36
37 copy_test(arr);
38 }
39
binary_tree_execution(Conductor & conductor)40 void binary_tree_execution(Conductor &conductor)
41 {
42
43 auto ex = conductor.addNewExecution("test execution");
44
45 auto &tree = ex->tree();
46
47 auto root = tree.createRoot(2, "0");
48 auto n1 = tree.promoteNode(root, 0, 2, tree::NodeStatus::BRANCH, "1");
49 auto n2 = tree.promoteNode(root, 1, 2, tree::NodeStatus::BRANCH, "2");
50
51 ex->userData().setSelectedNode(n1);
52
53 auto n3 = tree.promoteNode(n1, 0, 2, tree::NodeStatus::BRANCH, "3");
54 auto n4 = tree.promoteNode(n1, 1, 2, tree::NodeStatus::BRANCH, "4");
55
56 auto n5 = tree.promoteNode(n3, 0, 2, tree::NodeStatus::BRANCH, "5");
57 auto n6 = tree.promoteNode(n3, 1, 2, tree::NodeStatus::BRANCH, "6");
58
59 tree.promoteNode(n5, 0, 0, tree::NodeStatus::SOLVED, "7");
60 tree.promoteNode(n5, 1, 0, tree::NodeStatus::FAILED, "8");
61
62 tree.promoteNode(n6, 0, 0, tree::NodeStatus::FAILED, "9");
63 tree.promoteNode(n6, 1, 0, tree::NodeStatus::SKIPPED, "10");
64
65 auto n7 = tree.promoteNode(n4, 0, 0, tree::NodeStatus::FAILED, "11");
66 auto n8 = tree.promoteNode(n4, 1, 0, tree::NodeStatus::FAILED, "12");
67
68 auto n9 = tree.promoteNode(n2, 0, 2, tree::NodeStatus::BRANCH, "13");
69 auto n10 = tree.promoteNode(n2, 1, 0, tree::NodeStatus::FAILED, "14");
70
71 auto n11 = tree.promoteNode(n9, 0, 2, tree::NodeStatus::BRANCH, "15");
72 auto n12 = tree.promoteNode(n9, 1, 0, tree::NodeStatus::FAILED, "16");
73
74 auto n13 = tree.promoteNode(n11, 0, 2, tree::NodeStatus::BRANCH, "17");
75 auto n14 = tree.promoteNode(n11, 1, 0, tree::NodeStatus::FAILED, "18");
76
77 auto n15 = tree.promoteNode(n13, 0, 2, tree::NodeStatus::BRANCH, "19");
78 auto n16 = tree.promoteNode(n13, 1, 0, tree::NodeStatus::FAILED, "20");
79
80 auto n17 = tree.promoteNode(n15, 0, 2, tree::NodeStatus::BRANCH, "21");
81 auto n18 = tree.promoteNode(n15, 1, 0, tree::NodeStatus::FAILED, "22");
82
83 auto n19 = tree.promoteNode(n17, 0, 2, tree::NodeStatus::BRANCH, "23");
84 auto n20 = tree.promoteNode(n17, 1, 0, tree::NodeStatus::FAILED, "24");
85
86 auto n21 = tree.promoteNode(n19, 0, 2, tree::NodeStatus::BRANCH, "25");
87 auto n22 = tree.promoteNode(n19, 1, 0, tree::NodeStatus::FAILED, "26");
88
89 auto n23 = tree.promoteNode(n21, 0, 2, tree::NodeStatus::BRANCH, "27");
90 auto n24 = tree.promoteNode(n21, 1, 0, tree::NodeStatus::UNDETERMINED, "28");
91
92 auto n25 = tree.promoteNode(n23, 0, 2, tree::NodeStatus::BRANCH, "29");
93 auto n26 = tree.promoteNode(n23, 1, 0, tree::NodeStatus::FAILED, "30");
94
95 auto n27 = tree.promoteNode(n25, 0, 2, tree::NodeStatus::BRANCH, "31");
96 auto n28 = tree.promoteNode(n25, 1, 0, tree::NodeStatus::FAILED, "32");
97
98 auto n29 = tree.promoteNode(n27, 0, 2, tree::NodeStatus::BRANCH, "33");
99 auto n30 = tree.promoteNode(n27, 1, 0, tree::NodeStatus::FAILED, "34");
100
101 auto n31 = tree.promoteNode(n29, 0, 2, tree::NodeStatus::BRANCH, "35");
102 auto n32 = tree.promoteNode(n29, 1, 0, tree::NodeStatus::FAILED, "36");
103
104 auto n33 = tree.promoteNode(n31, 0, 2, tree::NodeStatus::BRANCH, "37");
105 auto n34 = tree.promoteNode(n31, 1, 0, tree::NodeStatus::FAILED, "38");
106
107 auto n35 = tree.promoteNode(n33, 0, 0, tree::NodeStatus::FAILED, "39");
108 auto n36 = tree.promoteNode(n33, 1, 0, tree::NodeStatus::FAILED, "40");
109
110 conductor.showTraditionalView(ex);
111 }
112
nary_execution(Conductor & conductor)113 void nary_execution(Conductor &conductor)
114 {
115
116 auto ex = conductor.addNewExecution("n-ary execution");
117
118 auto &tree = ex->tree();
119
120 auto root = tree.createRoot(4);
121 auto n1 = tree.promoteNode(root, 0, 2, tree::NodeStatus::BRANCH, "1");
122 auto n2 = tree.promoteNode(root, 1, 2, tree::NodeStatus::BRANCH, "2");
123 auto n3 = tree.promoteNode(root, 2, 0, tree::NodeStatus::FAILED, "3");
124 auto n4 = tree.promoteNode(root, 3, 2, tree::NodeStatus::BRANCH, "4");
125
126 auto n5 = tree.promoteNode(n1, 0, 0, tree::NodeStatus::FAILED, "5");
127 auto n6 = tree.promoteNode(n1, 1, 0, tree::NodeStatus::FAILED, "6");
128
129 auto n7 = tree.promoteNode(n2, 0, 0, tree::NodeStatus::FAILED, "7");
130 auto n8 = tree.promoteNode(n2, 1, 2, tree::NodeStatus::BRANCH, "8");
131
132 auto n9 = tree.promoteNode(n4, 0, 0, tree::NodeStatus::FAILED, "9");
133 auto n10 = tree.promoteNode(n4, 1, 0, tree::NodeStatus::FAILED, "10");
134
135 auto n11 = tree.promoteNode(n8, 0, 0, tree::NodeStatus::FAILED, "11");
136 auto n12 = tree.promoteNode(n8, 1, 0, tree::NodeStatus::FAILED, "12");
137 }
138
larger_nary_execution(Conductor & conductor)139 void larger_nary_execution(Conductor &conductor)
140 {
141
142 auto ex = conductor.addNewExecution("n-ary execution");
143
144 auto &tree = ex->tree();
145
146 auto root = tree.createRoot(4);
147 auto n1 = tree.promoteNode(root, 0, 2, tree::NodeStatus::BRANCH);
148 auto n2 = tree.promoteNode(root, 1, 2, tree::NodeStatus::BRANCH);
149 auto n3 = tree.promoteNode(root, 2, 0, tree::NodeStatus::FAILED);
150 auto n4 = tree.promoteNode(root, 3, 2, tree::NodeStatus::BRANCH);
151
152 auto n5 = tree.promoteNode(n1, 0, 0, tree::NodeStatus::FAILED);
153 auto n6 = tree.promoteNode(n1, 1, 12, tree::NodeStatus::BRANCH);
154
155 auto n6a = tree.promoteNode(n6, 0, 0, tree::NodeStatus::FAILED);
156 auto n6b = tree.promoteNode(n6, 1, 0, tree::NodeStatus::FAILED);
157 auto n6c = tree.promoteNode(n6, 2, 0, tree::NodeStatus::FAILED);
158 auto n6d = tree.promoteNode(n6, 3, 0, tree::NodeStatus::FAILED);
159 tree.promoteNode(n6, 4, 0, tree::NodeStatus::FAILED);
160 tree.promoteNode(n6, 5, 0, tree::NodeStatus::FAILED);
161 tree.promoteNode(n6, 6, 0, tree::NodeStatus::FAILED);
162 tree.promoteNode(n6, 7, 0, tree::NodeStatus::FAILED);
163 tree.promoteNode(n6, 8, 0, tree::NodeStatus::FAILED);
164 tree.promoteNode(n6, 9, 0, tree::NodeStatus::FAILED);
165 tree.promoteNode(n6, 10, 0, tree::NodeStatus::FAILED);
166 tree.promoteNode(n6, 11, 0, tree::NodeStatus::FAILED);
167
168 auto n7 = tree.promoteNode(n2, 0, 0, tree::NodeStatus::FAILED);
169 auto n8 = tree.promoteNode(n2, 1, 2, tree::NodeStatus::BRANCH);
170
171 auto n9 = tree.promoteNode(n4, 0, 0, tree::NodeStatus::FAILED);
172 auto n10 = tree.promoteNode(n4, 1, 0, tree::NodeStatus::FAILED);
173
174 auto n11 = tree.promoteNode(n8, 0, 0, tree::NodeStatus::FAILED);
175 auto n12 = tree.promoteNode(n8, 1, 0, tree::NodeStatus::FAILED);
176 }
177
simple_nary_execution(Conductor & conductor)178 void simple_nary_execution(Conductor &conductor)
179 {
180
181 auto ex = conductor.addNewExecution("n-ary execution");
182
183 auto &tree = ex->tree();
184
185 auto root = tree.createRoot(4);
186 auto n1 = tree.promoteNode(root, 0, 0, tree::NodeStatus::FAILED);
187 auto n2 = tree.promoteNode(root, 1, 0, tree::NodeStatus::FAILED);
188 auto n3 = tree.promoteNode(root, 2, 0, tree::NodeStatus::FAILED);
189 auto n4 = tree.promoteNode(root, 3, 0, tree::NodeStatus::FAILED);
190 }
191
binary_test_1_for_identical_subtrees(Conductor & conductor)192 void binary_test_1_for_identical_subtrees(Conductor &conductor)
193 {
194
195 auto ex = conductor.addNewExecution("test for identical subtree algorithm");
196
197 auto &tree = ex->tree();
198
199 auto root = tree.createRoot(2);
200 auto n1 = tree.promoteNode(root, 0, 2, tree::NodeStatus::BRANCH, "a");
201 auto n2 = tree.promoteNode(root, 1, 2, tree::NodeStatus::BRANCH, "b");
202
203 auto n3 = tree.promoteNode(n1, 0, 2, tree::NodeStatus::BRANCH, "c");
204 auto n4 = tree.promoteNode(n1, 1, 2, tree::NodeStatus::BRANCH, "d");
205 auto n11 = tree.promoteNode(n2, 0, 0, tree::NodeStatus::FAILED, "e");
206 auto n12 = tree.promoteNode(n2, 1, 2, tree::NodeStatus::BRANCH, "f");
207
208 auto n5 = tree.promoteNode(n3, 0, 0, tree::NodeStatus::FAILED, "g");
209 auto n6 = tree.promoteNode(n3, 1, 2, tree::NodeStatus::BRANCH, "h");
210 auto n9 = tree.promoteNode(n4, 0, 0, tree::NodeStatus::FAILED, "i");
211 auto n10 = tree.promoteNode(n4, 1, 0, tree::NodeStatus::FAILED, "j");
212 auto n13 = tree.promoteNode(n12, 0, 0, tree::NodeStatus::FAILED, "k");
213 auto n14 = tree.promoteNode(n12, 1, 0, tree::NodeStatus::FAILED, "l");
214
215 auto n7 = tree.promoteNode(n6, 0, 0, tree::NodeStatus::FAILED, "m");
216 auto n8 = tree.promoteNode(n6, 1, 0, tree::NodeStatus::FAILED, "n");
217 }
218
binary_test_2_for_identical_subtrees(Conductor & conductor)219 void binary_test_2_for_identical_subtrees(Conductor &conductor)
220 {
221
222 auto ex = conductor.addNewExecution("test for identical subtree algorithm");
223
224 auto &tree = ex->tree();
225
226 auto root = tree.createRoot(2, "0");
227 auto n1 = tree.promoteNode(root, 0, 2, tree::NodeStatus::BRANCH, "1");
228 auto n2 = tree.promoteNode(root, 1, 2, tree::NodeStatus::BRANCH, "2");
229
230 auto n3 = tree.promoteNode(n1, 0, 2, tree::NodeStatus::BRANCH, "3");
231 auto n4 = tree.promoteNode(n1, 1, 2, tree::NodeStatus::BRANCH, "4");
232 auto n5 = tree.promoteNode(n2, 0, 2, tree::NodeStatus::BRANCH, "5");
233 auto n6 = tree.promoteNode(n2, 1, 2, tree::NodeStatus::BRANCH, "6");
234
235 auto n7 = tree.promoteNode(n3, 0, 0, tree::NodeStatus::FAILED, "7");
236 auto n8 = tree.promoteNode(n3, 1, 0, tree::NodeStatus::FAILED, "8");
237 auto n9 = tree.promoteNode(n4, 0, 0, tree::NodeStatus::FAILED, "9");
238 auto n10 = tree.promoteNode(n4, 1, 2, tree::NodeStatus::BRANCH, "10");
239 auto n13 = tree.promoteNode(n6, 0, 2, tree::NodeStatus::BRANCH, "13");
240 auto n14 = tree.promoteNode(n6, 1, 2, tree::NodeStatus::BRANCH, "14");
241
242 auto n15 = tree.promoteNode(n10, 0, 0, tree::NodeStatus::FAILED, "15");
243 auto n16 = tree.promoteNode(n10, 1, 0, tree::NodeStatus::FAILED, "16");
244
245 auto n11 = tree.promoteNode(n5, 0, 0, tree::NodeStatus::FAILED, "11");
246 auto n12 = tree.promoteNode(n5, 1, 0, tree::NodeStatus::FAILED, "12");
247
248 auto n17 = tree.promoteNode(n13, 0, 0, tree::NodeStatus::FAILED, "17");
249 auto n18 = tree.promoteNode(n13, 1, 0, tree::NodeStatus::FAILED, "18");
250
251 auto n19 = tree.promoteNode(n14, 0, 0, tree::NodeStatus::FAILED, "19");
252 auto n20 = tree.promoteNode(n14, 1, 2, tree::NodeStatus::BRANCH, "20");
253
254 auto n21 = tree.promoteNode(n20, 0, 0, tree::NodeStatus::FAILED, "21");
255 auto n22 = tree.promoteNode(n20, 1, 0, tree::NodeStatus::FAILED, "22");
256 }
257
build_for_comparison_a(tree::NodeTree & tree)258 void build_for_comparison_a(tree::NodeTree &tree)
259 {
260
261 auto root = tree.createRoot(2, "0");
262
263 auto n1 = tree.promoteNode(root, 0, 2, tree::NodeStatus::BRANCH, "1");
264 auto n2 = tree.promoteNode(root, 1, 2, tree::NodeStatus::BRANCH, "2");
265
266 auto n3 = tree.promoteNode(n1, 0, 0, tree::NodeStatus::FAILED, "3");
267 auto n4 = tree.promoteNode(n1, 1, 2, tree::NodeStatus::BRANCH, "4");
268
269 auto n7 = tree.promoteNode(n4, 0, 0, tree::NodeStatus::FAILED, "7");
270 auto n8 = tree.promoteNode(n4, 1, 0, tree::NodeStatus::FAILED, "8");
271
272 auto n5 = tree.promoteNode(n2, 0, 0, tree::NodeStatus::SOLVED, "5");
273 auto n6 = tree.promoteNode(n2, 1, 0, tree::NodeStatus::FAILED, "6");
274 }
275
build_for_comparison_b(tree::NodeTree & tree)276 void build_for_comparison_b(tree::NodeTree &tree)
277 {
278
279 auto root = tree.createRoot(2, "0");
280
281 auto n1 = tree.promoteNode(root, 0, 2, tree::NodeStatus::BRANCH, "1");
282 auto n2 = tree.promoteNode(root, 1, 0, tree::NodeStatus::FAILED, "2");
283
284 auto n3 = tree.promoteNode(n1, 0, 0, tree::NodeStatus::FAILED, "3");
285 auto n4 = tree.promoteNode(n1, 1, 2, tree::NodeStatus::BRANCH, "4");
286
287 auto n7 = tree.promoteNode(n4, 0, 2, tree::NodeStatus::BRANCH, "7");
288 auto n8 = tree.promoteNode(n4, 1, 0, tree::NodeStatus::FAILED, "8");
289
290 auto n9 = tree.promoteNode(n7, 0, 0, tree::NodeStatus::FAILED, "9");
291 auto n10 = tree.promoteNode(n7, 1, 0, tree::NodeStatus::FAILED, "10");
292 }
293
comparison(Conductor & c)294 void comparison(Conductor &c)
295 {
296
297 auto ex1 = c.addNewExecution("Execution A");
298 build_for_comparison_a(ex1->tree());
299
300 auto ex2 = c.addNewExecution("Execution B");
301 build_for_comparison_b(ex2->tree());
302
303 c.mergeTrees(ex1, ex2);
304 }
305
comparison2(Conductor & c)306 void comparison2(Conductor &c)
307 {
308
309 const auto path = "/home/maxim/dev/cp-profiler2/golomb8.db";
310
311 auto ex1 = db_handler::load_execution(path);
312 if (ex1)
313 c.addNewExecution(ex1);
314
315 auto ex2 = db_handler::load_execution(path);
316 if (ex2)
317 c.addNewExecution(ex2);
318
319 c.mergeTrees(ex1.get(), ex2.get());
320 }
321
tree_building(Conductor & c)322 void tree_building(Conductor &c)
323 {
324
325 /// create a dummy root node
326 auto ex = c.addNewExecution("test tree");
327
328 auto &tree = ex->tree();
329
330 auto root = tree.createRoot(0);
331
332 auto n1 = tree.promoteNode(NodeID::NoNode, -1, 0, tree::NodeStatus::FAILED, "1");
333 // auto n2 = tree.promoteNode(root, 1, 0, tree::NodeStatus::FAILED, "2");
334
335 // auto n3 = tree.promoteNode(n1, 0, 0, tree::NodeStatus::FAILED, "3");
336 // auto n4 = tree.promoteNode(n1, 1, 0, tree::NodeStatus::FAILED, "4");
337 }
338
hiding_failed_test(Conductor & c)339 void hiding_failed_test(Conductor &c)
340 {
341
342 auto ex = c.addNewExecution("test hiding failed");
343
344 auto &tree = ex->tree();
345
346 auto root = tree.createRoot(2, "0");
347
348 auto n1 = tree.promoteNode(root, 0, 2, tree::NodeStatus::BRANCH, "1");
349 auto n2 = tree.promoteNode(root, 1, 2, tree::NodeStatus::BRANCH, "2");
350
351 auto n3 = tree.promoteNode(n1, 0, 2, tree::NodeStatus::BRANCH, "3");
352 auto n4 = tree.promoteNode(n1, 1, 0, tree::NodeStatus::SOLVED, "4");
353
354 auto n5 = tree.promoteNode(n3, 0, 0, tree::NodeStatus::FAILED, "5");
355 auto n6 = tree.promoteNode(n3, 1, 0, tree::NodeStatus::FAILED, "6");
356
357 auto n7 = tree.promoteNode(n2, 0, 0, tree::NodeStatus::UNDETERMINED, "7");
358 auto n8 = tree.promoteNode(n2, 1, 2, tree::NodeStatus::BRANCH, "8");
359
360 auto n9 = tree.promoteNode(n8, 0, 0, tree::NodeStatus::FAILED, "9");
361 auto n10 = tree.promoteNode(n8, 1, 0, tree::NodeStatus::FAILED, "10");
362 }
363
restart_tree(Conductor & c)364 void restart_tree(Conductor &c)
365 {
366
367 auto ex = c.addNewExecution("Restart Tree");
368
369 auto &tree = ex->tree();
370
371 utils::MutexLocker locker(&tree.treeMutex());
372
373 auto root = tree.createRoot(0);
374
375 tree.addExtraChild(root);
376 // tree.addExtraChild(root);
377 // tree.addExtraChild(root);
378 // tree.addExtraChild(root);
379 // tree.addExtraChild(root);
380 // tree.addExtraChild(root);
381
382 // tree.addExtraChild(tree.getChild(root, 3));
383 }
384
load_execution(Conductor & c,const char * path)385 static void load_execution(Conductor &c, const char *path)
386 {
387
388 auto ex = db_handler::load_execution(path);
389
390 if (!ex)
391 {
392 print("could not load the execution");
393 }
394 else
395 {
396 c.addNewExecution(ex);
397 }
398 }
399
save_and_load(Conductor & c,const char * path)400 static void save_and_load(Conductor &c, const char *path)
401 {
402
403 auto ex1 = c.addNewExecution("simple execution");
404 build_for_comparison_a(ex1->tree());
405
406 ex1->userData().setBookmark(NodeID{2}, "Test Bookmark");
407
408 db_handler::save_execution(ex1, path);
409
410 auto ex = db_handler::load_execution(path);
411 if (!ex)
412 {
413 print("could not load the execution");
414 }
415 else
416 {
417 c.addNewExecution(ex);
418 }
419 }
420
db_create_tree(Conductor & c)421 static void db_create_tree(Conductor &c)
422 {
423
424 auto ex = c.addNewExecution("Created as in DB");
425 auto &tree = ex->tree();
426
427 tree.db_initialize(100);
428
429 tree.db_createRoot(NodeID{0});
430
431 tree.db_addChild(NodeID{1}, NodeID{0}, 0, tree::NodeStatus::BRANCH, "a");
432 tree.db_addChild(NodeID{2}, NodeID{0}, 1, tree::NodeStatus::BRANCH, "b");
433 }
434
save_search(Conductor & c)435 static void save_search(Conductor &c)
436 {
437
438 auto ex1 = c.addNewExecution("simple execution");
439 build_for_comparison_a(ex1->tree());
440
441 c.saveSearch(ex1, "test.search");
442 }
443
444 /// similar subtree
ss_analysis(Conductor & c)445 static void ss_analysis(Conductor &c)
446 {
447
448 const char *path = "/home/maxim/dev/cp-profiler2/golomb6.db";
449 // const char *path = "/home/maxim/dev/cp-profiler2/golomb10.db";
450 auto ex = db_handler::load_execution(path);
451 if (!ex)
452 {
453 print("could not load the execution");
454 }
455 else
456 {
457 c.addNewExecution(ex);
458 c.showTraditionalView(ex.get());
459 }
460 }
461
nogood_dialog(Conductor & c)462 static void nogood_dialog(Conductor &c)
463 {
464
465 const char *orig_path = "/home/maxim/dev/cp-profiler2/nogoods.db";
466
467 auto ex = db_handler::load_execution(orig_path);
468 if (!ex)
469 {
470 print("could not load the execution");
471 }
472 else
473 {
474 c.addNewExecution(ex);
475 // c.showTraditionalView(ex.get());
476 }
477
478 const char *replayed_path = "/home/maxim/dev/cp-profiler2/nogoods_replayed.db";
479
480 auto ex2 = db_handler::load_execution(replayed_path);
481 if (!ex2)
482 {
483 print("could not load the execution");
484 }
485 else
486 {
487 c.addNewExecution(ex2);
488 // c.showTraditionalView(ex2.get());
489 }
490
491 c.runNogoodAnalysis(ex.get(), ex2.get());
492
493 // c.mergeTrees(ex.get(), ex2.get());
494 }
495
run(Conductor & c)496 void run(Conductor &c)
497 {
498
499 /// this one works with db
500 // binary_test_1_for_identical_subtrees(c);
501
502 // binary_test_2_for_identical_subtrees(c);
503
504 // binary_tree_execution(c);
505 // simple_nary_execution(c);
506 // nary_execution(c);
507 // larger_nary_execution(c);
508
509 // hiding_failed_test(c);
510
511 // comparison(c);
512
513 // comparison2(c);
514
515 // tree_building(c);
516
517 // restart_tree(c);
518
519 // load_execution(c, "/home/maxim/dev/cp-profiler2/golomb8.db");
520
521 // save_and_load(c, "/home/maxim/dev/cp-profiler2/test.db");
522
523 // nogood_dialog(c);
524
525 // db_create_tree(c);
526
527 // save_search(c);
528
529 // ss_analysis(c);
530 }
531
532 } // namespace execution
533 } // namespace tests
534 } // namespace cpprofiler
535