Skip to content

Commit 451fedb

Browse files
committed
✅ Add edge case tests
1 parent fa93628 commit 451fedb

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

test/algorithms/simulation/sidb/clock_emulator.cpp

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,83 @@ TEST_CASE("4-pair BDL wire emulation test with ClusterComplete", "[clock-emulato
175175
result.pretty_print();
176176
}
177177
#endif // FICTION_ALGLIB_ENABLED
178+
179+
TEST_CASE("Zero clock phases", "[clock-emulator]")
180+
{
181+
const auto lyt = create_5_pair_bdl_wire_layout();
182+
const auto params = create_default_params();
183+
184+
const auto result = emulate_clocks(lyt, 0, params);
185+
186+
CHECK(result.clock_phase_results.empty());
187+
}
188+
189+
TEST_CASE("Empty layout", "[clock-emulator]")
190+
{
191+
sidb_100_cell_clk_lyt_siqad lyt{};
192+
193+
const auto params = create_default_params();
194+
const auto result = emulate_clocks(lyt, 4, params);
195+
196+
REQUIRE(result.clock_phase_results.size() == 4);
197+
198+
for (const auto& phase_result : result.clock_phase_results)
199+
{
200+
REQUIRE(phase_result.charge_distributions.size() == 1);
201+
CHECK(phase_result.charge_distributions.front().num_cells() == 0);
202+
CHECK(phase_result.charge_distributions.front().num_defects() == 0);
203+
}
204+
}
205+
206+
TEST_CASE("Single SiDB", "[clock-emulator]")
207+
{
208+
sidb_100_cell_clk_lyt_siqad lyt{};
209+
210+
lyt.assign_cell_type({0, 0, 0}, sidb_technology::NORMAL);
211+
lyt.assign_clock_number({0, 0, 0}, 0);
212+
213+
const auto params = create_default_params();
214+
const auto result = emulate_clocks(lyt, 4, params);
215+
216+
REQUIRE(result.clock_phase_results.size() == 4);
217+
218+
// phase 0: the single SiDB should be simulated
219+
REQUIRE(result.clock_phase_results[0].charge_distributions.size() == 1);
220+
CHECK(result.clock_phase_results[0].charge_distributions.front().num_cells() == 1);
221+
CHECK(result.clock_phase_results[0].charge_distributions.front().num_defects() == 0);
222+
CHECK(result.clock_phase_results[0].charge_distributions.front().get_charge_state({0, 0, 0}) ==
223+
sidb_charge_state::NEGATIVE);
224+
}
225+
226+
TEST_CASE("All SiDBs in one clock zone", "[clock-emulator]")
227+
{
228+
sidb_100_cell_clk_lyt_siqad lyt{};
229+
230+
// place two SiDBs, both in clock zone 0
231+
lyt.assign_cell_type({0, 0, 0}, sidb_technology::NORMAL);
232+
lyt.assign_clock_number({0, 0, 0}, 0);
233+
lyt.assign_cell_type({5, 0, 0}, sidb_technology::NORMAL);
234+
lyt.assign_clock_number({5, 0, 0}, 0);
235+
236+
const auto params = create_default_params();
237+
const auto result = emulate_clocks(lyt, 4, params);
238+
239+
REQUIRE(result.clock_phase_results.size() == 4);
240+
241+
for (const auto& phase_result : result.clock_phase_results)
242+
{
243+
REQUIRE(phase_result.charge_distributions.size() == 1);
244+
CHECK(phase_result.charge_distributions.front().num_cells() == 2);
245+
CHECK(phase_result.charge_distributions.front().num_defects() == 0);
246+
}
247+
}
248+
249+
TEST_CASE("Unsupported simulation engine throws", "[clock-emulator]")
250+
{
251+
const auto lyt = create_5_pair_bdl_wire_layout();
252+
253+
clock_emulator_params params{};
254+
params.sim_engine = sidb_simulation_engine::EXGS;
255+
256+
CHECK_THROWS_AS(emulate_clocks(lyt, 1, params), std::invalid_argument);
257+
}

0 commit comments

Comments
 (0)