@@ -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