| /* | |
| * Timed average computation tests | |
| * | |
| * Copyright Nodalink, EURL. 2014 | |
| * | |
| * Authors: | |
| * BenoƮt Canet <benoit.canet@nodalink.com> | |
| * | |
| * This work is licensed under the terms of the GNU LGPL, version 2 or later. | |
| * See the COPYING.LIB file in the top-level directory. | |
| */ | |
| #include "qemu/osdep.h" | |
| #include "system/cpu-timers.h" | |
| #include "qemu/timed-average.h" | |
| /* This is the clock for QEMU_CLOCK_VIRTUAL */ | |
| static int64_t my_clock_value; | |
| int64_t cpu_get_clock(void) | |
| { | |
| return my_clock_value; | |
| } | |
| static void account(TimedAverage *ta) | |
| { | |
| timed_average_account(ta, 1); | |
| timed_average_account(ta, 5); | |
| timed_average_account(ta, 2); | |
| timed_average_account(ta, 4); | |
| timed_average_account(ta, 3); | |
| } | |
| static void test_average(void) | |
| { | |
| TimedAverage ta; | |
| uint64_t result; | |
| int i; | |
| /* we will compute some average on a period of 1 second */ | |
| timed_average_init(&ta, QEMU_CLOCK_VIRTUAL, NANOSECONDS_PER_SECOND); | |
| result = timed_average_min(&ta); | |
| g_assert(result == 0); | |
| result = timed_average_avg(&ta); | |
| g_assert(result == 0); | |
| result = timed_average_max(&ta); | |
| g_assert(result == 0); | |
| for (i = 0; i < 100; i++) { | |
| account(&ta); | |
| result = timed_average_min(&ta); | |
| g_assert(result == 1); | |
| result = timed_average_avg(&ta); | |
| g_assert(result == 3); | |
| result = timed_average_max(&ta); | |
| g_assert(result == 5); | |
| my_clock_value += NANOSECONDS_PER_SECOND / 10; | |
| } | |
| my_clock_value += NANOSECONDS_PER_SECOND * 100; | |
| result = timed_average_min(&ta); | |
| g_assert(result == 0); | |
| result = timed_average_avg(&ta); | |
| g_assert(result == 0); | |
| result = timed_average_max(&ta); | |
| g_assert(result == 0); | |
| for (i = 0; i < 100; i++) { | |
| account(&ta); | |
| result = timed_average_min(&ta); | |
| g_assert(result == 1); | |
| result = timed_average_avg(&ta); | |
| g_assert(result == 3); | |
| result = timed_average_max(&ta); | |
| g_assert(result == 5); | |
| my_clock_value += NANOSECONDS_PER_SECOND / 10; | |
| } | |
| } | |
| int main(int argc, char **argv) | |
| { | |
| /* tests in the same order as the header function declarations */ | |
| g_test_init(&argc, &argv, NULL); | |
| g_test_add_func("/timed-average/average", test_average); | |
| return g_test_run(); | |
| } | |