Initial circuits plugin work.
This commit is contained in:
parent
b5f21900eb
commit
f8a2ce3c59
50 changed files with 1451 additions and 97 deletions
9
plugins/circuits/test/CMakeLists.txt
Normal file
9
plugins/circuits/test/CMakeLists.txt
Normal file
|
@ -0,0 +1,9 @@
|
|||
set(PLUGIN_NAME circuits)
|
||||
|
||||
list(APPEND UNIT_TEST_FILES
|
||||
TestElectronicCircuit.cpp
|
||||
)
|
||||
|
||||
add_executable(${PLUGIN_NAME}_unit_tests ${CMAKE_SOURCE_DIR}/test/test_runner.cpp ${UNIT_TEST_FILES})
|
||||
target_link_libraries(${PLUGIN_NAME}_unit_tests PUBLIC test_utils circuits)
|
||||
set_property(TARGET ${PLUGIN_NAME}_unit_tests PROPERTY FOLDER plugins)
|
71
plugins/circuits/test/TestElectronicCircuit.cpp
Normal file
71
plugins/circuits/test/TestElectronicCircuit.cpp
Normal file
|
@ -0,0 +1,71 @@
|
|||
#include "TestFramework.h"
|
||||
#include "TestUtils.h"
|
||||
#include "TestRenderUtils.h"
|
||||
|
||||
#include "ElectronicCircuit.h"
|
||||
#include "ElectronicCircuitNode.h"
|
||||
|
||||
#include "BasicLogicGates.h"
|
||||
|
||||
TEST_CASE(TestElectronicCircuit, "circuits")
|
||||
{
|
||||
TestRenderer renderer(100, 100);
|
||||
|
||||
auto circuit = std::make_unique<ElectronicCircuit>();
|
||||
|
||||
// Add three labelled terminals (two in, one out)
|
||||
auto input0 = std::make_unique<Terminal>(Terminal::TerminalType::INPUT, "p");
|
||||
auto input1 = std::make_unique<Terminal>(Terminal::TerminalType::INPUT, "q");
|
||||
auto input2 = std::make_unique<Terminal>(Terminal::TerminalType::INPUT, "r");
|
||||
|
||||
auto output = std::make_unique<Terminal>(Terminal::TerminalType::OUTPUT, "s");
|
||||
|
||||
// Add gates
|
||||
auto and_gate = std::make_unique<AndLogicGate>();
|
||||
auto or_gate = std::make_unique<OrLogicGate>();
|
||||
|
||||
// Add wires
|
||||
auto wire0 = std::make_unique<Wire>(input0.get(), and_gate.get());
|
||||
auto wire1 = std::make_unique<Wire>(input1.get(), and_gate.get());
|
||||
|
||||
auto wire2 = std::make_unique<Wire>(and_gate.get(), or_gate.get());
|
||||
auto wire3 = std::make_unique<Wire>(input2.get(), or_gate.get());
|
||||
|
||||
auto wire4 = std::make_unique<Wire>(or_gate.get(), output.get());
|
||||
|
||||
// Join wires
|
||||
and_gate->setInput0(wire0.get());
|
||||
and_gate->setInput1(wire1.get());
|
||||
and_gate->setOutput(wire2.get());
|
||||
|
||||
or_gate->setInput0(wire2.get());
|
||||
or_gate->setInput1(wire3.get());
|
||||
or_gate->setOutput(wire4.get());
|
||||
|
||||
input0->setConnection(wire0.get());
|
||||
input1->setConnection(wire1.get());
|
||||
input2->setConnection(wire3.get());
|
||||
output->setConnection(wire4.get());
|
||||
|
||||
// Add to circuit
|
||||
circuit->addWire(std::move(wire0));
|
||||
circuit->addWire(std::move(wire1));
|
||||
circuit->addWire(std::move(wire2));
|
||||
circuit->addWire(std::move(wire3));
|
||||
|
||||
circuit->addInputTerminal(std::move(input0));
|
||||
circuit->addInputTerminal(std::move(input1));
|
||||
circuit->addInputTerminal(std::move(input2));
|
||||
|
||||
circuit->addOutputTerminal(std::move(output));
|
||||
|
||||
circuit->addLogicGate(std::move(and_gate));
|
||||
circuit->addLogicGate(std::move(or_gate));
|
||||
|
||||
auto circuit_node = std::make_unique<ElectronicCircuitNode>(Transform());
|
||||
|
||||
circuit_node->setContent(circuit.get());
|
||||
|
||||
renderer.getScene()->addNode(circuit_node.get());
|
||||
renderer.writeSvg(TestUtils::getTestOutputDir(__FILE__) / "circuit.svg");
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue