@@ -129,3 +129,35 @@ TEST_F(BusesSimpleEvaluatorTest, BusTristate) {
129129 evaluator->tickStep ();
130130 EXPECT_EQ (std::get<std::vector<logic_state_t >>(evaluator->getPinState (tristatePos)), std::vector<logic_state_t >({ Z, Z }));
131131}
132+
133+ TEST_F (BusesSimpleEvaluatorTest, BusEndsHaveSameSimIds) {
134+ BlockDataManager& blockDataManager = environment.getBackend ().getBlockDataManager ();
135+ const BlockData* bus2Data = blockDataManager.getBlockData (BUS2);
136+ ASSERT_NE (bus2Data, nullptr );
137+
138+ Position bus1Pos (0 , 0 );
139+ Position bus2Pos (2 , 0 );
140+ Position bus3Pos (4 , 0 );
141+ Position switch1Pos (0 , 2 );
142+ Position switch2Pos (1 , 2 );
143+ ASSERT_TRUE (circuit->tryInsertBlock (bus1Pos, 0 , BUS2));
144+ ASSERT_TRUE (circuit->tryInsertBlock (bus2Pos, 0 , BUS2));
145+ ASSERT_TRUE (circuit->tryInsertBlock (bus3Pos, 0 , BUS2));
146+ ASSERT_TRUE (circuit->tryInsertBlock (switch1Pos, 0 , BlockType::SWITCH));
147+ ASSERT_TRUE (circuit->tryInsertBlock (switch2Pos, 0 , BlockType::SWITCH));
148+
149+ ASSERT_TRUE (circuit->tryCreateConnection (switch1Pos, bus1Pos + *bus2Data->getConnectionVector (0 )));
150+ ASSERT_TRUE (circuit->tryCreateConnection (switch2Pos, bus3Pos + *bus2Data->getConnectionVector (1 )));
151+ ASSERT_TRUE (circuit->tryCreateConnection (bus1Pos + *bus2Data->getConnectionVector (2 ), bus2Pos + *bus2Data->getConnectionVector (2 )));
152+ ASSERT_TRUE (circuit->tryCreateConnection (bus2Pos + *bus2Data->getConnectionVector (2 ), bus3Pos + *bus2Data->getConnectionVector (2 )));
153+
154+ std::variant<simulator_id_t , std::vector<simulator_id_t >> bus1OutputSimId = evaluator->getPinSimulatorId (bus1Pos + *(bus2Data->getConnectionVector (2 )));
155+ std::variant<simulator_id_t , std::vector<simulator_id_t >> bus2OutputSimId = evaluator->getPinSimulatorId (bus2Pos + *(bus2Data->getConnectionVector (2 )));
156+ std::variant<simulator_id_t , std::vector<simulator_id_t >> bus3OutputSimId = evaluator->getPinSimulatorId (bus3Pos + *(bus2Data->getConnectionVector (2 )));
157+
158+ ASSERT_TRUE (std::holds_alternative<std::vector<simulator_id_t >>(bus1OutputSimId));
159+ ASSERT_TRUE (std::holds_alternative<std::vector<simulator_id_t >>(bus2OutputSimId));
160+ ASSERT_TRUE (std::holds_alternative<std::vector<simulator_id_t >>(bus3OutputSimId));
161+ EXPECT_EQ (std::get<std::vector<simulator_id_t >>(bus1OutputSimId), std::get<std::vector<simulator_id_t >>(bus2OutputSimId));
162+ EXPECT_EQ (std::get<std::vector<simulator_id_t >>(bus2OutputSimId), std::get<std::vector<simulator_id_t >>(bus3OutputSimId));
163+ }
0 commit comments