Skip to content

Commit 0d55b5d

Browse files
committed
Add tests for @time
1 parent 0166232 commit 0d55b5d

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

src/logic/vm/mod.rs

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,31 @@ mod tests {
366366
}
367367
}
368368

369+
fn assert_variables_epsilon<'a, T>(processor: &Processor, epsilon: f64, vars: T)
370+
where
371+
T: IntoIterator<Item = (&'a str, f64)>,
372+
{
373+
for (name, want) in vars {
374+
match want.into() {
375+
Some(want) => {
376+
assert!(
377+
processor.variables.contains_key(name),
378+
"variable not found: {name}"
379+
);
380+
let got = processor.variables[name].get(&processor.state).num();
381+
assert!(
382+
(got - want).abs() <= epsilon,
383+
"want {name} == {want} +- {epsilon}, got {got}"
384+
);
385+
}
386+
None => assert!(
387+
!processor.variables.contains_key(name),
388+
"unexpected variable found: {name}"
389+
),
390+
};
391+
}
392+
}
393+
369394
#[test]
370395
fn test_empty() {
371396
let mut vm = LogicVM::from_schematic_tiles(&[]).unwrap();
@@ -2531,4 +2556,71 @@ mod tests {
25312556
);
25322557
}
25332558
}
2559+
2560+
#[test]
2561+
fn test_time() {
2562+
let mut vm = single_processor_vm(
2563+
MICRO_PROCESSOR,
2564+
"
2565+
set tick1 @tick
2566+
set time1 @time
2567+
set second1 @second
2568+
set minute1 @minute
2569+
2570+
set tick2 @tick
2571+
set time2 @time
2572+
set second2 @second
2573+
set minute2 @minute
2574+
2575+
set tick3 @tick
2576+
set time3 @time
2577+
set second3 @second
2578+
set minute3 @minute
2579+
2580+
set tick4 @tick
2581+
set time4 @time
2582+
set second4 @second
2583+
set minute4 @minute
2584+
",
2585+
);
2586+
2587+
vm.do_tick(Duration::ZERO);
2588+
vm.do_tick(Duration::ZERO);
2589+
2590+
vm.do_tick(Duration::from_secs(1));
2591+
vm.do_tick(Duration::ZERO);
2592+
2593+
vm.do_tick(Duration::from_millis(1));
2594+
vm.do_tick(Duration::ZERO);
2595+
2596+
vm.do_tick(Duration::from_secs(60));
2597+
vm.do_tick(Duration::ZERO);
2598+
2599+
let processor = take_processor(&mut vm, (0, 0));
2600+
assert_variables_epsilon(
2601+
&processor,
2602+
1e-8,
2603+
map_iter! {
2604+
"tick1": 0.,
2605+
"time1": 0.,
2606+
"second1": 0.,
2607+
"minute1": 0.,
2608+
2609+
"tick2": 1. * 60.,
2610+
"time2": 1000.,
2611+
"second2": 1.,
2612+
"minute2": 1. / 60.,
2613+
2614+
"tick3": 1.001 * 60.,
2615+
"time3": 1001.,
2616+
"second3": 1.001,
2617+
"minute3": 1.001 / 60.,
2618+
2619+
"tick4": 61.001 * 60.,
2620+
"time4": 61001.,
2621+
"second4": 61.001,
2622+
"minute4": 1.001 / 60. + 1.,
2623+
},
2624+
);
2625+
}
25342626
}

0 commit comments

Comments
 (0)