/* vim: set expandtab ts=4 sw=4: */ /* * You may redistribute this program and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation, * either version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "memory/MallocAllocator.h" #include "util/AverageRoller.h" #include "util/AverageRoller_pvt.h" #include "util/events/EventBase.h" #include int main() { #define ENTRY_COUNT 13 // {seconds,entry} const uint32_t testData[ENTRY_COUNT][3] = { // The entry between the */and/* is the one which was just altered. // second col1 col2 col3 average { 0,/* */0/* */, 0}, { 1,/* 0 */1/* */, 0}, { 2,/* 0 1 */2/* */, 1}, { 3,/* */3/* 1 2 */, 2}, { 4,/* 3 */4/* 2 */, 3}, { 5,/* 3 4 */5/* */, 4}, { 6,/* */6/* 4 5 */, 5}, { 7,/* 6 */7/* 5 */, 6}, { 8,/* 6 7 */8/* */, 7}, { 9,/* */9/* 7 8 */, 8}, // 9 */7/* 8 8 skipped a second {11,/* 9 7 */7/* */, 7}, {12,/* */6/* 7 7 */, 6}, // 6 */7/* 7 6 skipped a second {14,/* 6 7 */4/* */, 5} }; const uint32_t windowSeconds = 3; struct Allocator* allocator = MallocAllocator_new(4096); struct EventBase* eventBase = EventBase_new(allocator); struct AverageRoller_pvt* roller = (struct AverageRoller_pvt*) AverageRoller_new(windowSeconds, eventBase, allocator); // To make life easy we will pretend it's january first 1970... roller->lastUpdateTime = 0; uint32_t ret = 0; for (uint32_t i = 0; i < ENTRY_COUNT; i++) { uint32_t average = AverageRoller_updateAtTime(&roller->pub, testData[i][0], testData[i][1]); if (average != testData[i][2]) { printf("For average #%d, expected %d, got %d, float: %f, entryCount: %d\n", (int) i, (int) testData[i][2], (int) average, ((float) roller->sum) / roller->entryCount, (int) roller->entryCount); ret = 1; } } return ret; }