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