Skip to content

Commit b8e719c

Browse files
committed
test full adder circuit
1 parent 912baab commit b8e719c

File tree

2 files changed

+200
-0
lines changed

2 files changed

+200
-0
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
version_8
2+
Circuit: "full adder"
3+
UUID: 48c02244-0e58-4f74-80ad-12b2a154def1
4+
size: 2x3
5+
ports:
6+
(IN, 0, (-3, -3), <0, 0>, <0.500000, 0.500000>, "", 1)
7+
(IN, 1, (-3, -1), <0, 1>, <0.500000, 0.500000>, "", 1)
8+
(IN, 2, (-3, 1), <0, 2>, <0.500000, 0.500000>, "", 1)
9+
(OUT, 3, (12, -2), <1, 0>, <0.500000, 0.500000>, "", 1)
10+
(OUT, 4, (10, -8), <1, 1>, <0.500000, 0.500000>, "", 1)
11+
blockId 4 SWITCH -3 -3 ZERO
12+
(connId:0) (9 0)
13+
blockId 5 SWITCH -3 -1 ZERO
14+
(connId:0) (8 0)
15+
blockId 6 SWITCH -3 1 ZERO
16+
(connId:0) (7 0)
17+
blockId 7 JUNCTION -1 1 ZERO
18+
(connId:0) (6 0) (12 0) (13 0) (26 0) (27 0)
19+
blockId 8 JUNCTION 0 -1 ZERO
20+
(connId:0) (5 0) (11 0) (14 0) (26 0) (27 0)
21+
blockId 9 JUNCTION 1 -3 ZERO
22+
(connId:0) (4 0) (10 0) (15 0) (30 0) (33 0)
23+
blockId 10 JUNCTION 1 2 ZERO
24+
(connId:0) (9 0) (40 0) (41 0) (42 0)
25+
blockId 11 JUNCTION 0 4 ZERO
26+
(connId:0) (8 0) (40 0) (41 0) (42 0)
27+
blockId 12 JUNCTION -1 6 ZERO
28+
(connId:0) (7 0) (40 0) (41 0) (42 0)
29+
blockId 13 JUNCTION -1 -5 ZERO
30+
(connId:0) (7 0) (19 0) (23 0) (24 0)
31+
blockId 14 JUNCTION 0 -7 ZERO
32+
(connId:0) (8 0) (19 0) (22 0) (24 0)
33+
blockId 15 JUNCTION 1 -9 ZERO
34+
(connId:0) (9 0) (22 0) (23 0) (24 0)
35+
blockId 19 AND 3 -7 ZERO
36+
(connId:0) (13 0) (14 0)
37+
(connId:1) (25 0)
38+
blockId 22 AND 3 -9 ZERO
39+
(connId:0) (14 0) (15 0)
40+
(connId:1) (25 0)
41+
blockId 23 AND 3 -8 ZERO
42+
(connId:0) (13 0) (15 0)
43+
(connId:1) (25 0)
44+
blockId 24 XOR 3 -5 ZERO
45+
(connId:0) (13 0) (14 0) (15 0)
46+
(connId:1) (36 0)
47+
blockId 25 OR 5 -8 ZERO
48+
(connId:0) (19 1) (22 1) (23 1)
49+
(connId:1) (39 0)
50+
blockId 26 XOR 2 -1 ZERO
51+
(connId:0) (7 0) (8 0)
52+
(connId:1) (30 0) (33 0)
53+
blockId 27 AND 2 0 ZERO
54+
(connId:0) (7 0) (8 0)
55+
(connId:1) (34 0)
56+
blockId 30 XOR 4 -2 ZERO
57+
(connId:0) (9 0) (26 1)
58+
(connId:1) (35 0)
59+
blockId 33 AND 4 -1 ZERO
60+
(connId:0) (9 0) (26 1)
61+
(connId:1) (34 0)
62+
blockId 34 OR 6 0 ZERO
63+
(connId:0) (27 1) (33 1)
64+
(connId:1) (37 0)
65+
blockId 35 JUNCTION 6 -2 ZERO
66+
(connId:0) (30 1) (36 0) (45 0)
67+
blockId 36 JUNCTION 6 -5 ZERO
68+
(connId:0) (24 1) (35 0)
69+
blockId 37 JUNCTION 8 0 ZERO
70+
(connId:0) (34 1) (39 0) (44 0)
71+
blockId 39 JUNCTION 8 -8 ZERO
72+
(connId:0) (25 1) (37 0) (47 0)
73+
blockId 40 XOR 3 3 ZERO
74+
(connId:0) (10 0) (11 0) (12 0)
75+
(connId:1) (43 0) (46 0)
76+
blockId 41 AND 3 4 ZERO
77+
(connId:0) (10 0) (11 0) (12 0)
78+
(connId:1) (43 0)
79+
blockId 42 OR 3 5 ZERO
80+
(connId:0) (10 0) (11 0) (12 0)
81+
(connId:1) (43 0)
82+
blockId 43 XOR 5 5 ZERO
83+
(connId:0) (40 1) (41 1) (42 1)
84+
(connId:1) (44 0)
85+
blockId 44 JUNCTION 8 5 ZERO
86+
(connId:0) (37 0) (43 1)
87+
blockId 45 JUNCTION 10 -2 ZERO
88+
(connId:0) (35 0) (46 0) (48 0)
89+
blockId 46 JUNCTION 10 3 ZERO
90+
(connId:0) (40 1) (45 0)
91+
blockId 47 LIGHT 10 -8 ZERO
92+
(connId:0) (39 0)
93+
blockId 48 LIGHT 12 -2 ZERO
94+
(connId:0) (45 0)
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#include <gtest/gtest.h>
2+
#include "environment/environment.h"
3+
#include "backend/evaluator/evaluator.h"
4+
#include "computerAPI/directoryManager.h"
5+
#include "backend/blockData/blockDataManager.h"
6+
7+
class CompleteCircuitsEvaluatorTest : public ::testing::Test {
8+
protected:
9+
void SetUp() override;
10+
void TearDown() override;
11+
Environment environment { false };
12+
SharedEvaluator evaluator = nullptr;
13+
SharedCircuit circuit = nullptr;
14+
logic_state_t L = logic_state_t::LOW;
15+
logic_state_t H = logic_state_t::HIGH;
16+
logic_state_t Z = logic_state_t::FLOATING;
17+
logic_state_t X = logic_state_t::UNDEFINED;
18+
BlockType loadCircuit(const std::filesystem::path& path);
19+
const BlockData* getBlockData(BlockType type);
20+
};
21+
22+
BlockType CompleteCircuitsEvaluatorTest::loadCircuit(const std::filesystem::path& path) {
23+
CircuitFileManager& circuitFileManager = environment.getCircuitFileManager();
24+
circuit_id_t circuitId = circuitFileManager.loadFromFile(path.string()).at(0);
25+
SharedCircuit circuit = environment.getBackend().getCircuitManager().getCircuit(circuitId);
26+
return circuit->getBlockType();
27+
}
28+
29+
const BlockData* CompleteCircuitsEvaluatorTest::getBlockData(BlockType type) {
30+
const BlockData* blockData = environment.getBackend().getBlockDataManager().getBlockData(type);
31+
return blockData;
32+
}
33+
34+
void CompleteCircuitsEvaluatorTest::SetUp() {
35+
circuit_id_t circuitId = environment.getBackend().getCircuitManager().createNewCircuit(false);
36+
circuit = environment.getBackend().getCircuit(circuitId);
37+
evaluator_id_t evalId = environment.getBackend().createEvaluator(circuitId).value();
38+
evaluator = environment.getBackend().getEvaluator(evalId);
39+
ASSERT_TRUE(evaluator->isPause());
40+
}
41+
42+
void CompleteCircuitsEvaluatorTest::TearDown() {
43+
circuit.reset();
44+
evaluator.reset();
45+
}
46+
47+
TEST_F(CompleteCircuitsEvaluatorTest, FullAdder) {
48+
BlockType FA = loadCircuit(DirectoryManager::getResourceDirectory() / "circuits" / "evaluator" / "full_adder.cir");
49+
Position aPos(0, 0);
50+
Position bPos(0, 1);
51+
Position cinPos(0, 2);
52+
Position sumPos(1, 0);
53+
Position coutPos(1, 1);
54+
ASSERT_TRUE(circuit->tryInsertBlock(aPos, 0, FA));
55+
56+
Position switch1Pos(-1, 0);
57+
Position switch2Pos(-1, 1);
58+
Position switch3Pos(-1, 2);
59+
60+
Position light1Pos(2, 0);
61+
Position light2Pos(2, 1);
62+
63+
ASSERT_TRUE(circuit->tryInsertBlock(switch1Pos, 0, BlockType::SWITCH));
64+
ASSERT_TRUE(circuit->tryInsertBlock(switch2Pos, 0, BlockType::SWITCH));
65+
ASSERT_TRUE(circuit->tryInsertBlock(switch3Pos, 0, BlockType::SWITCH));
66+
ASSERT_TRUE(circuit->tryInsertBlock(light1Pos, 0, BlockType::LIGHT));
67+
ASSERT_TRUE(circuit->tryInsertBlock(light2Pos, 0, BlockType::LIGHT));
68+
69+
ASSERT_TRUE(circuit->tryCreateConnection(switch1Pos, aPos));
70+
ASSERT_TRUE(circuit->tryCreateConnection(switch2Pos, bPos));
71+
ASSERT_TRUE(circuit->tryCreateConnection(switch3Pos, cinPos));
72+
ASSERT_TRUE(circuit->tryCreateConnection(sumPos, light1Pos));
73+
ASSERT_TRUE(circuit->tryCreateConnection(coutPos, light2Pos));
74+
75+
evaluator->tickStep(3);
76+
EXPECT_EQ(evaluator->getState(light1Pos), L);
77+
EXPECT_EQ(evaluator->getState(light2Pos), L);
78+
evaluator->setState(switch1Pos, H);
79+
evaluator->tickStep(3);
80+
EXPECT_EQ(evaluator->getState(light1Pos), H);
81+
EXPECT_EQ(evaluator->getState(light2Pos), L);
82+
evaluator->setState(switch2Pos, H);
83+
evaluator->tickStep(3);
84+
EXPECT_EQ(evaluator->getState(light1Pos), L);
85+
EXPECT_EQ(evaluator->getState(light2Pos), H);
86+
evaluator->setState(switch1Pos, L);
87+
evaluator->tickStep(3);
88+
EXPECT_EQ(evaluator->getState(light1Pos), H);
89+
EXPECT_EQ(evaluator->getState(light2Pos), L);
90+
evaluator->setState(switch3Pos, H);
91+
evaluator->tickStep(3);
92+
EXPECT_EQ(evaluator->getState(light1Pos), L);
93+
EXPECT_EQ(evaluator->getState(light2Pos), H);
94+
evaluator->setState(switch2Pos, L);
95+
evaluator->tickStep(3);
96+
EXPECT_EQ(evaluator->getState(light1Pos), H);
97+
EXPECT_EQ(evaluator->getState(light2Pos), L);
98+
evaluator->setState(switch1Pos, H);
99+
evaluator->tickStep(3);
100+
EXPECT_EQ(evaluator->getState(light1Pos), L);
101+
EXPECT_EQ(evaluator->getState(light2Pos), H);
102+
evaluator->setState(switch2Pos, H);
103+
evaluator->tickStep(3);
104+
EXPECT_EQ(evaluator->getState(light1Pos), H);
105+
EXPECT_EQ(evaluator->getState(light2Pos), H);
106+
}

0 commit comments

Comments
 (0)