11#include " circuitTest.h"
22
3+ Position randPos () {
4+ return Position (rand () % 100000 , rand () % 100000 );
5+ }
6+
7+ const int loopsPerTest = 100 ;
8+
39void CircuitTest::SetUp () {
410 circuit_id_t circuitId = environment.getBackend ().getCircuitManager ().createNewCircuit (" Circuit" , generate_uuid_v4 ());
511 circuit = environment.getBackend ().getCircuitManager ().getCircuit (circuitId);
@@ -9,8 +15,8 @@ void CircuitTest::SetUp() {
915void CircuitTest::TearDown () { circuit.reset (); }
1016
1117TEST_F (CircuitTest, BlockContainerBasicOperations) {
12- for (i = 0 ; i < 100 ; i++) {
13- Position pos ( rand () % 100000 , rand () % 100000 );
18+ for (int i = 0 ; i < loopsPerTest ; i++) {
19+ Position pos = randPos ( );
1420 Rotation rot = Rotation::ZERO;
1521
1622 bool success = circuit->tryInsertBlock (pos, rot, BlockType::AND);
@@ -36,13 +42,17 @@ TEST_F(CircuitTest, BlockContainerBasicOperations) {
3642 circuit->redo ();
3743 block = container.getBlock (pos);
3844 ASSERT_FALSE (block == nullptr );
45+
46+ circuit->clear (true );
47+ block = container.getBlock (pos);
48+ ASSERT_TRUE (block == nullptr );
3949 }
4050}
4151
4252TEST_F (CircuitTest, BlockPlacementCollision) {
43- for (i = 0 ; i < 100 ; i++) {
53+ for (i = 0 ; i < loopsPerTest ; i++) {
4454 // circuit->clear(true);
45- Position pos ( rand () % 100000 , rand () % 100000 );
55+ Position pos = randPos ( );
4656 Rotation rot = Rotation::ZERO;
4757
4858 bool success = circuit->tryInsertBlock (pos, rot, BlockType::AND);
@@ -66,7 +76,7 @@ TEST_F(CircuitTest, BlockPlacementCollision) {
6676 block = circuit->getBlockContainer ().getBlock (pos);
6777 ASSERT_TRUE (block == nullptr );
6878
69- // // Test redo after undo nothing
79+ // Test redo after undo nothing
7080 circuit->redo ();
7181 block = circuit->getBlockContainer ().getBlock (pos);
7282 ASSERT_TRUE (block != nullptr );
@@ -78,9 +88,9 @@ TEST_F(CircuitTest, BlockPlacementCollision) {
7888}
7989
8090TEST_F (CircuitTest, ConnectionCreation) {
81- for (i = 0 ; i < 100 ; i++) {
82- Position pos1 ( rand () % 100000 , rand () % 100000 );
83- Position pos2 ( rand () % 100000 , rand () % 100000 );
91+ for (i = 0 ; i < loopsPerTest ; i++) {
92+ Position pos1 = randPos ( );
93+ Position pos2 = randPos ( );
8494 if (pos1 == pos2) {
8595 --i;
8696 continue ;
@@ -136,9 +146,9 @@ TEST_F(CircuitTest, ConnectionCreation) {
136146}
137147
138148TEST_F (CircuitTest, ConnectionCreationConnectionEnd) {
139- for (i = 0 ; i < 100 ; i++) {
140- Position pos1 ( rand () % 100000 , rand () % 100000 );
141- Position pos2 ( rand () % 100000 , rand () % 100000 );
149+ for (i = 0 ; i < loopsPerTest ; i++) {
150+ Position pos1 = randPos ( );
151+ Position pos2 = randPos ( );
142152 if (pos1 == pos2) {
143153 --i;
144154 continue ;
@@ -176,10 +186,10 @@ TEST_F(CircuitTest, ConnectionCreationConnectionEnd) {
176186}
177187
178188TEST_F (CircuitTest, InvalidConnections) {
179- for (i = 0 ; i < 100 ; i++) {
180- Position pos1 ( rand () % 100000 , rand () % 100000 );
181- Position pos2 ( rand () % 100000 , rand () % 100000 );
182- Position nonExistent ( rand () % 100000 , rand () % 100000 );
189+ for (i = 0 ; i < loopsPerTest ; i++) {
190+ Position pos1 = randPos ( );
191+ Position pos2 = randPos ( );
192+ Position nonExistent = randPos ( );
183193 if (pos1 == pos2 || pos1 == nonExistent || pos2 == nonExistent) {
184194 --i;
185195 continue ;
@@ -215,8 +225,8 @@ TEST_F(CircuitTest, InvalidConnections) {
215225}
216226
217227TEST_F (CircuitTest, BlockRemoval) {
218- for (i = 0 ; i < 100 ; i++) {
219- Position pos ( rand () % 100000 , rand () % 100000 );
228+ for (i = 0 ; i < loopsPerTest ; i++) {
229+ Position pos = randPos ( );
220230 Rotation rot = Rotation::ZERO;
221231
222232 circuit->tryInsertBlock (pos, rot, BlockType::AND);
@@ -239,9 +249,9 @@ TEST_F(CircuitTest, BlockRemoval) {
239249}
240250
241251TEST_F (CircuitTest, ConnectionRemoval) {
242- for (i = 0 ; i < 100 ; i++) {
243- Position pos1 ( rand () % 100000 , rand () % 100000 );
244- Position pos2 ( rand () % 100000 , rand () % 100000 );
252+ for (i = 0 ; i < loopsPerTest ; i++) {
253+ Position pos1 = randPos ( );
254+ Position pos2 = randPos ( );
245255 if (pos1 == pos2) {
246256 --i;
247257 continue ;
@@ -275,7 +285,7 @@ TEST_F(CircuitTest, ConnectionRemoval) {
275285}
276286
277287TEST_F (CircuitTest, BlockTypePlacement) {
278- for (i = 0 ; i < 100 ; i++) {
288+ for (i = 0 ; i < loopsPerTest ; i++) {
279289 Position pos (0 , 100 * i);
280290 Rotation rot = Rotation::ZERO;
281291 BlockType type = (BlockType)(i);
@@ -299,9 +309,9 @@ TEST_F(CircuitTest, BlockTypePlacement) {
299309}
300310
301311TEST_F (CircuitTest, ConnectionRemovalConnectionEnd) {
302- for (int i = 0 ; i < 100 ; i++) {
303- Position pos1 ( rand () % 100000 , rand () % 100000 );
304- Position pos2 ( rand () % 100000 , rand () % 100000 );
312+ for (int i = 0 ; i < loopsPerTest ; i++) {
313+ Position pos1 = randPos ( );
314+ Position pos2 = randPos ( );
305315 if (pos1 == pos2) {
306316 --i;
307317 continue ;
@@ -333,6 +343,24 @@ TEST_F(CircuitTest, ConnectionRemovalConnectionEnd) {
333343 const Block* block2 = container.getBlock (pos2);
334344 ASSERT_TRUE (block1 == nullptr );
335345 ASSERT_TRUE (block2 == nullptr );
346+
347+ // Test redo everything
348+ circuit->redo (); // redo block 2
349+ circuit->redo (); // redo block 1
350+ block1 = container.getBlock (pos1);
351+ block2 = container.getBlock (pos2);
352+ ASSERT_FALSE (block1 == nullptr );
353+ ASSERT_FALSE (block2 == nullptr );
354+ circuit->redo (); // undo connection creation
355+ ASSERT_TRUE (container.connectionExists (pos1, pos2));
356+ circuit->redo (); // redo connection removal
357+ ASSERT_FALSE (container.connectionExists (pos1, pos2));
358+
359+ circuit->clear (true ); // clear circuit and undoTree
360+ block1 = container.getBlock (pos1);
361+ block2 = container.getBlock (pos2);
362+ ASSERT_TRUE (block1 == nullptr );
363+ ASSERT_TRUE (block2 == nullptr );
336364 }
337365}
338366
@@ -358,12 +386,21 @@ TEST_F(CircuitTest, CircuitPlacement) {
358386 circuit->undo ();
359387 block1 = circuit->getBlockContainer ().getBlock (Position ());
360388 ASSERT_EQ (block1, nullptr );
389+
390+ // Test redo stuff
391+ circuit->undo ();
392+ block1 = circuit->getBlockContainer ().getBlock (Position ());
393+ ASSERT_NE (block1, nullptr );
394+
395+ circuit->clear (true ); // clear circuit and undoTree
396+ block1 = circuit->getBlockContainer ().getBlock (Position ());
397+ ASSERT_EQ (block1, nullptr );
361398}
362399
363400TEST_F (CircuitTest, BlockConnectionRemoval) {
364- for (int i = 0 ; i < 100 ; i++) {
365- Position pos1 ( rand () % 100000 , rand () % 100000 );
366- Position pos2 ( rand () % 100000 , rand () % 100000 );
401+ for (int i = 0 ; i < loopsPerTest ; i++) {
402+ Position pos1 = randPos ( );
403+ Position pos2 = randPos ( );
367404 if (pos1 == pos2) {
368405 --i;
369406 continue ;
@@ -387,7 +424,7 @@ TEST_F(CircuitTest, BlockConnectionRemoval) {
387424
388425 // Test undoing everything
389426 circuit->undo (); // undo insert2
390- circuit->undo (); // undo removeblock cxion should exist
427+ circuit->undo (); // undo removeblock connection should exist
391428 connection12 = container.connectionExists (pos1, pos2);
392429 connection21 = container.connectionExists (pos2, pos1);
393430 ASSERT_TRUE (connection12);
@@ -404,30 +441,74 @@ TEST_F(CircuitTest, BlockConnectionRemoval) {
404441 const Block* block2 = container.getBlock (pos1);
405442 ASSERT_TRUE (block1 == nullptr );
406443 ASSERT_TRUE (block2 == nullptr );
444+
445+ // Test redoing everything
446+ circuit->redo (); // redo block at pos2
447+ circuit->redo (); // redo block at pos1
448+ block1 = container.getBlock (pos1);
449+ block2 = container.getBlock (pos1);
450+ ASSERT_FALSE (block1 == nullptr );
451+ ASSERT_FALSE (block2 == nullptr );
452+ circuit->redo (); // rendo connection 21
453+ circuit->redo (); // rendo conneciton 12
454+ connection12 = container.connectionExists (pos1, pos2);
455+ connection21 = container.connectionExists (pos2, pos1);
456+ ASSERT_TRUE (connection12);
457+ ASSERT_TRUE (connection21);
458+ circuit->redo (); // redo insert2
459+ circuit->redo (); // redo removeblock connection should not exist
460+ connection12 = container.connectionExists (pos1, pos2);
461+ connection21 = container.connectionExists (pos2, pos1);
462+ ASSERT_FALSE (connection12);
463+ ASSERT_FALSE (connection21);
464+
465+ circuit->clear (true ); // clear circuit and undoTree
466+ connection12 = container.connectionExists (pos1, pos2);
467+ connection21 = container.connectionExists (pos2, pos1);
468+ ASSERT_FALSE (connection12);
469+ ASSERT_FALSE (connection21);
470+ block1 = container.getBlock (pos1);
471+ block2 = container.getBlock (pos1);
472+ ASSERT_TRUE (block1 == nullptr );
473+ ASSERT_TRUE (block2 == nullptr );
407474 }
408475}
409476
410477TEST_F (CircuitTest, MoveBlockSimple) {
411478 // test move block simple
412- Position pos1 (0 , 0 );
413- Position pos2 (10 , 10 );
414- const BlockContainer& container = circuit->getBlockContainer ();
479+ for (int i = 0 ; i < loopsPerTest; i++) {
480+ Position pos1 = randPos ();
481+ Position pos2 = randPos ();
482+ const BlockContainer& container = circuit->getBlockContainer ();
415483
416- bool inserted = circuit->tryInsertBlock (pos1, Rotation::ZERO, BlockType::AND);
417- const Block* block1 = container.getBlock (pos1);
418- bool moved = circuit->tryMoveBlock (pos1, pos2, Orientation ());
419- const Block* block2 = container.getBlock (pos1);
420- const Block* block3 = container.getBlock (pos2);
421- ASSERT_TRUE (inserted);
422- ASSERT_TRUE (moved);
423- ASSERT_EQ (block2, nullptr );
424- ASSERT_EQ (block1, block3);
425- // test undo move
426- circuit->undo ();
427- const Block* block4 = container.getBlock (pos1);
428- const Block* block5 = container.getBlock (pos2);
429- ASSERT_EQ (block5, nullptr );
430- ASSERT_EQ (block1, block4);
484+ bool inserted = circuit->tryInsertBlock (pos1, Rotation::ZERO, BlockType::AND);
485+ const Block* block1 = container.getBlock (pos1);
486+ bool moved = circuit->tryMoveBlock (pos1, pos2, Orientation ());
487+ const Block* block2 = container.getBlock (pos1);
488+ const Block* block3 = container.getBlock (pos2);
489+ ASSERT_TRUE (inserted);
490+ ASSERT_TRUE (moved);
491+ ASSERT_EQ (block2, nullptr );
492+ ASSERT_EQ (block1, block3);
493+ // test undo move
494+ circuit->undo ();
495+ const Block* block4 = container.getBlock (pos1);
496+ const Block* block5 = container.getBlock (pos2);
497+ ASSERT_EQ (block5, nullptr );
498+ ASSERT_EQ (block1, block4);
499+ // // test redo move
500+ // circuit->redo();
501+ // const Block* block6 = container.getBlock(pos1);
502+ // const Block* block7 = container.getBlock(pos2);
503+ // ASSERT_EQ(block6, nullptr);
504+ // ASSERT_EQ(block1, block7);
505+
506+ // circuit->clear(true); // clear circuit and undoTree
507+ // const Block* block8 = container.getBlock(pos1);
508+ // const Block* block9 = container.getBlock(pos2);
509+ // ASSERT_EQ(block6, nullptr);
510+ // ASSERT_EQ(block9, nullptr);
511+ }
431512}
432513
433514TEST_F (CircuitTest, MoveBlock) {
0 commit comments