/** * Copyright (c) 2026 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "dusktest.h" #include "script/scriptmanager.h" #include "time/time.h" static int time_setup(void **state) { errorret_t ret = scriptManagerInit(); if(errorIsNotOk(ret)) { errorCatch(ret); return -1; } return 0; } static int time_teardown(void **state) { errorret_t ret = scriptManagerDispose(); if(errorIsNotOk(ret)) errorCatch(ret); return 0; } static void test_time_delta_and_time_readback(void **state) { TIME.delta = 0.5f; TIME.time = 12.0f; jerry_value_t result; errorret_t ret = scriptManagerExec("Time.delta;", &result); assert_true(errorIsOk(ret)); assert_float_equal((float_t)jerry_value_as_number(result), 0.5f, 0.0001f); jerry_value_free(result); ret = scriptManagerExec("Time.time;", &result); assert_true(errorIsOk(ret)); assert_float_equal((float_t)jerry_value_as_number(result), 12.0f, 0.0001f); jerry_value_free(result); } static void test_time_render_delta_readback(void **state) { // Under DUSK_TIME_DYNAMIC, renderDelta reads dynamicDelta (real // per-render-frame time); otherwise it falls back to the fixed delta. // Set both so this test passes either way this binary was built. TIME.delta = 0.25f; #ifdef DUSK_TIME_DYNAMIC TIME.dynamicDelta = 0.75f; #endif jerry_value_t result; errorret_t ret = scriptManagerExec("Time.renderDelta;", &result); assert_true(errorIsOk(ret)); #ifdef DUSK_TIME_DYNAMIC assert_float_equal((float_t)jerry_value_as_number(result), 0.75f, 0.0001f); #else assert_float_equal((float_t)jerry_value_as_number(result), 0.25f, 0.0001f); #endif jerry_value_free(result); } int main(void) { assertInit(); const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown( test_time_delta_and_time_readback, time_setup, time_teardown ), cmocka_unit_test_setup_teardown( test_time_render_delta_readback, time_setup, time_teardown ), }; return cmocka_run_group_tests(tests, NULL, NULL); }