Skip to content

Commit 9d9ceea

Browse files
committed
circuit tests break eval. clearing is breaking it
1 parent 2d07d51 commit 9d9ceea

File tree

1 file changed

+127
-46
lines changed

1 file changed

+127
-46
lines changed

tests/circuitTest.cpp

Lines changed: 127 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
#include "circuitTest.h"
22

3+
Position randPos() {
4+
return Position(rand() % 100000, rand() % 100000);
5+
}
6+
7+
const int loopsPerTest = 100;
8+
39
void 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() {
915
void CircuitTest::TearDown() { circuit.reset(); }
1016

1117
TEST_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

4252
TEST_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

8090
TEST_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

138148
TEST_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

178188
TEST_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

217227
TEST_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

241251
TEST_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

277287
TEST_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

301311
TEST_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

363400
TEST_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

410477
TEST_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

433514
TEST_F(CircuitTest, MoveBlock) {

0 commit comments

Comments
 (0)