1bd797fc1SAlberto Garcia /* 2bd797fc1SAlberto Garcia * Timed average computation tests 3bd797fc1SAlberto Garcia * 4bd797fc1SAlberto Garcia * Copyright Nodalink, EURL. 2014 5bd797fc1SAlberto Garcia * 6bd797fc1SAlberto Garcia * Authors: 7bd797fc1SAlberto Garcia * Benoît Canet <benoit.canet@nodalink.com> 8bd797fc1SAlberto Garcia * 9bd797fc1SAlberto Garcia * This work is licensed under the terms of the GNU LGPL, version 2 or later. 10bd797fc1SAlberto Garcia * See the COPYING.LIB file in the top-level directory. 11bd797fc1SAlberto Garcia */ 12bd797fc1SAlberto Garcia 13*681c28a3SPeter Maydell #include "qemu/osdep.h" 14bd797fc1SAlberto Garcia #include <glib.h> 15bd797fc1SAlberto Garcia 16bd797fc1SAlberto Garcia #include "qemu/timed-average.h" 17bd797fc1SAlberto Garcia 18bd797fc1SAlberto Garcia /* This is the clock for QEMU_CLOCK_VIRTUAL */ 19bd797fc1SAlberto Garcia static int64_t my_clock_value; 20bd797fc1SAlberto Garcia 21bd797fc1SAlberto Garcia int64_t cpu_get_clock(void) 22bd797fc1SAlberto Garcia { 23bd797fc1SAlberto Garcia return my_clock_value; 24bd797fc1SAlberto Garcia } 25bd797fc1SAlberto Garcia 26bd797fc1SAlberto Garcia static void account(TimedAverage *ta) 27bd797fc1SAlberto Garcia { 28bd797fc1SAlberto Garcia timed_average_account(ta, 1); 29bd797fc1SAlberto Garcia timed_average_account(ta, 5); 30bd797fc1SAlberto Garcia timed_average_account(ta, 2); 31bd797fc1SAlberto Garcia timed_average_account(ta, 4); 32bd797fc1SAlberto Garcia timed_average_account(ta, 3); 33bd797fc1SAlberto Garcia } 34bd797fc1SAlberto Garcia 35bd797fc1SAlberto Garcia static void test_average(void) 36bd797fc1SAlberto Garcia { 37bd797fc1SAlberto Garcia TimedAverage ta; 38bd797fc1SAlberto Garcia uint64_t result; 39bd797fc1SAlberto Garcia int i; 40bd797fc1SAlberto Garcia 41bd797fc1SAlberto Garcia /* we will compute some average on a period of 1 second */ 42bd797fc1SAlberto Garcia timed_average_init(&ta, QEMU_CLOCK_VIRTUAL, NANOSECONDS_PER_SECOND); 43bd797fc1SAlberto Garcia 44bd797fc1SAlberto Garcia result = timed_average_min(&ta); 45bd797fc1SAlberto Garcia g_assert(result == 0); 46bd797fc1SAlberto Garcia result = timed_average_avg(&ta); 47bd797fc1SAlberto Garcia g_assert(result == 0); 48bd797fc1SAlberto Garcia result = timed_average_max(&ta); 49bd797fc1SAlberto Garcia g_assert(result == 0); 50bd797fc1SAlberto Garcia 51bd797fc1SAlberto Garcia for (i = 0; i < 100; i++) { 52bd797fc1SAlberto Garcia account(&ta); 53bd797fc1SAlberto Garcia result = timed_average_min(&ta); 54bd797fc1SAlberto Garcia g_assert(result == 1); 55bd797fc1SAlberto Garcia result = timed_average_avg(&ta); 56bd797fc1SAlberto Garcia g_assert(result == 3); 57bd797fc1SAlberto Garcia result = timed_average_max(&ta); 58bd797fc1SAlberto Garcia g_assert(result == 5); 59bd797fc1SAlberto Garcia my_clock_value += NANOSECONDS_PER_SECOND / 10; 60bd797fc1SAlberto Garcia } 61bd797fc1SAlberto Garcia 62bd797fc1SAlberto Garcia my_clock_value += NANOSECONDS_PER_SECOND * 100; 63bd797fc1SAlberto Garcia 64bd797fc1SAlberto Garcia result = timed_average_min(&ta); 65bd797fc1SAlberto Garcia g_assert(result == 0); 66bd797fc1SAlberto Garcia result = timed_average_avg(&ta); 67bd797fc1SAlberto Garcia g_assert(result == 0); 68bd797fc1SAlberto Garcia result = timed_average_max(&ta); 69bd797fc1SAlberto Garcia g_assert(result == 0); 70bd797fc1SAlberto Garcia 71bd797fc1SAlberto Garcia for (i = 0; i < 100; i++) { 72bd797fc1SAlberto Garcia account(&ta); 73bd797fc1SAlberto Garcia result = timed_average_min(&ta); 74bd797fc1SAlberto Garcia g_assert(result == 1); 75bd797fc1SAlberto Garcia result = timed_average_avg(&ta); 76bd797fc1SAlberto Garcia g_assert(result == 3); 77bd797fc1SAlberto Garcia result = timed_average_max(&ta); 78bd797fc1SAlberto Garcia g_assert(result == 5); 79bd797fc1SAlberto Garcia my_clock_value += NANOSECONDS_PER_SECOND / 10; 80bd797fc1SAlberto Garcia } 81bd797fc1SAlberto Garcia } 82bd797fc1SAlberto Garcia 83bd797fc1SAlberto Garcia int main(int argc, char **argv) 84bd797fc1SAlberto Garcia { 85bd797fc1SAlberto Garcia /* tests in the same order as the header function declarations */ 86bd797fc1SAlberto Garcia g_test_init(&argc, &argv, NULL); 87bd797fc1SAlberto Garcia g_test_add_func("/timed-average/average", test_average); 88bd797fc1SAlberto Garcia return g_test_run(); 89bd797fc1SAlberto Garcia } 90bd797fc1SAlberto Garcia 91