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