Path: blob/main/unittest/src/utils/common/ValueTimeLineTest.cpp
169684 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file ValueTimeLineTest.cpp14/// @author Daniel Krajzewicz15/// @author Matthias Heppner16/// @author Michael Behrisch17/// @date Sept 200918///19// Tests ValueTimeLine class from <SUMO>/src/utils/common20/****************************************************************************/212223// ===========================================================================24// included modules25// ===========================================================================26#include <config.h>2728#include <gtest/gtest.h>29#include <utils/common/ValueTimeLine.h>303132// ===========================================================================33// test definitions34// ===========================================================================35/* Tests what happens if one tries to get a value from an empty ValueTimeLine. */36/*37TEST(ValueTimeLine, test_get_from_empty) {38ValueTimeLine<int> vtl;39EXPECT_EQ(1, vtl.getValue(0)) << "Something should happen if nothing was stored.";40}41*/424344// --------------------------------45// plain retrieval / overwriting tests46// --------------------------------4748/* Tests what happens if one tries to get a stored value (one value stored, fillGaps not called). */49TEST(ValueTimeLine, test_get_single_nocollect) {50ValueTimeLine<int> vtl;51vtl.add(0, 100, 2);52EXPECT_EQ(2, vtl.getValue(0)) << "The stored number should be returned when asking within the interval.";53EXPECT_EQ(2, vtl.getValue(99)) << "The stored number should be returned when asking within the interval.";54EXPECT_EQ(2, vtl.getValue(50)) << "The stored number should be returned when asking within the interval.";55}5657/* Tests what happens if one tries to get a stored value (three values stored, fillGaps not called). */58TEST(ValueTimeLine, test_get_multi_nocollect) {59ValueTimeLine<int> vtl;60vtl.add(0, 100, 1);61vtl.add(100, 200, 2);62vtl.add(200, 300, 3);63EXPECT_EQ(1, vtl.getValue(0)) << "The stored number should be returned when asking within the interval.";64EXPECT_EQ(1, vtl.getValue(99)) << "The stored number should be returned when asking within the interval.";65EXPECT_EQ(1, vtl.getValue(50)) << "The stored number should be returned when asking within the interval.";66EXPECT_EQ(2, vtl.getValue(100)) << "The stored number should be returned when asking within the interval.";67EXPECT_EQ(2, vtl.getValue(199)) << "The stored number should be returned when asking within the interval.";68EXPECT_EQ(2, vtl.getValue(150)) << "The stored number should be returned when asking within the interval.";69EXPECT_EQ(3, vtl.getValue(200)) << "The stored number should be returned when asking within the interval.";70EXPECT_EQ(3, vtl.getValue(299)) << "The stored number should be returned when asking within the interval.";71EXPECT_EQ(3, vtl.getValue(250)) << "The stored number should be returned when asking within the interval.";72}7374/* Tests what happens if one tries to get a stored value (one value stored, fillGaps called). */75TEST(ValueTimeLine, test_get_single_collect) {76ValueTimeLine<int> vtl;77vtl.add(0, 100, 2);78vtl.fillGaps(0);79EXPECT_EQ(2, vtl.getValue(0)) << "The stored number should be returned when asking within the interval.";80EXPECT_EQ(2, vtl.getValue(99)) << "The stored number should be returned when asking within the interval.";81EXPECT_EQ(2, vtl.getValue(50)) << "The stored number should be returned when asking within the interval.";82}8384/* Tests what happens if one tries to get a stored value (three values stored, fillGaps called). */85TEST(ValueTimeLine, test_get_multi_collect) {86ValueTimeLine<int> vtl;87vtl.add(0, 100, 1);88vtl.add(100, 200, 2);89vtl.add(200, 300, 3);90vtl.fillGaps(0);91EXPECT_EQ(1, vtl.getValue(0)) << "The stored number should be returned when asking within the interval.";92EXPECT_EQ(1, vtl.getValue(99)) << "The stored number should be returned when asking within the interval.";93EXPECT_EQ(1, vtl.getValue(50)) << "The stored number should be returned when asking within the interval.";94EXPECT_EQ(2, vtl.getValue(100)) << "The stored number should be returned when asking within the interval.";95EXPECT_EQ(2, vtl.getValue(199)) << "The stored number should be returned when asking within the interval.";96EXPECT_EQ(2, vtl.getValue(150)) << "The stored number should be returned when asking within the interval.";97EXPECT_EQ(3, vtl.getValue(200)) << "The stored number should be returned when asking within the interval.";98EXPECT_EQ(3, vtl.getValue(299)) << "The stored number should be returned when asking within the interval.";99EXPECT_EQ(3, vtl.getValue(250)) << "The stored number should be returned when asking within the interval.";100}101102// --------------------------------103// overwriting filling tests104// --------------------------------105106/* Tests what happens if one overwrites a value (three values stored, fillGaps not called). */107TEST(ValueTimeLine, test_overwrite_nocollect) {108ValueTimeLine<int> vtl;109vtl.add(0, 100, 1);110vtl.add(200, 300, 3);111vtl.add(50, 250, 2);112EXPECT_EQ(1, vtl.getValue(0)) << "The stored number should be returned when asking within the interval.";113EXPECT_EQ(2, vtl.getValue(99)) << "The stored number should be returned when asking within the interval.";114EXPECT_EQ(2, vtl.getValue(50)) << "The stored number should be returned when asking within the interval.";115EXPECT_EQ(2, vtl.getValue(100)) << "The stored number should be returned when asking within the interval.";116EXPECT_EQ(2, vtl.getValue(199)) << "The stored number should be returned when asking within the interval.";117EXPECT_EQ(2, vtl.getValue(150)) << "The stored number should be returned when asking within the interval.";118EXPECT_EQ(2, vtl.getValue(200)) << "The stored number should be returned when asking within the interval.";119EXPECT_EQ(3, vtl.getValue(299)) << "The stored number should be returned when asking within the interval.";120EXPECT_EQ(3, vtl.getValue(250)) << "The stored number should be returned when asking within the interval.";121}122123/* Tests what happens if one overwrites a value (three values stored, fillGaps called). */124TEST(ValueTimeLine, test_overwrite_collect) {125ValueTimeLine<int> vtl;126vtl.add(0, 100, 1);127vtl.add(200, 300, 3);128vtl.add(50, 250, 2);129vtl.fillGaps(0);130EXPECT_EQ(1, vtl.getValue(0)) << "The stored number should be returned when asking within the interval.";131EXPECT_EQ(2, vtl.getValue(99)) << "The stored number should be returned when asking within the interval.";132EXPECT_EQ(2, vtl.getValue(50)) << "The stored number should be returned when asking within the interval.";133EXPECT_EQ(2, vtl.getValue(100)) << "The stored number should be returned when asking within the interval.";134EXPECT_EQ(2, vtl.getValue(199)) << "The stored number should be returned when asking within the interval.";135EXPECT_EQ(2, vtl.getValue(150)) << "The stored number should be returned when asking within the interval.";136EXPECT_EQ(2, vtl.getValue(200)) << "The stored number should be returned when asking within the interval.";137EXPECT_EQ(3, vtl.getValue(299)) << "The stored number should be returned when asking within the interval.";138EXPECT_EQ(3, vtl.getValue(250)) << "The stored number should be returned when asking within the interval.";139}140141/* Tests what happens if one overwrites a value (three values stored, fillGaps not called, order changed). */142TEST(ValueTimeLine, test_overwrite_nocollect2) {143ValueTimeLine<int> vtl;144vtl.add(50, 250, 2);145vtl.add(0, 100, 1);146vtl.add(200, 300, 3);147EXPECT_EQ(1, vtl.getValue(0)) << "The stored number should be returned when asking within the interval.";148EXPECT_EQ(1, vtl.getValue(99)) << "The stored number should be returned when asking within the interval.";149EXPECT_EQ(1, vtl.getValue(50)) << "The stored number should be returned when asking within the interval.";150EXPECT_EQ(2, vtl.getValue(100)) << "The stored number should be returned when asking within the interval.";151EXPECT_EQ(2, vtl.getValue(199)) << "The stored number should be returned when asking within the interval.";152EXPECT_EQ(2, vtl.getValue(150)) << "The stored number should be returned when asking within the interval.";153EXPECT_EQ(3, vtl.getValue(200)) << "The stored number should be returned when asking within the interval.";154EXPECT_EQ(3, vtl.getValue(299)) << "The stored number should be returned when asking within the interval.";155EXPECT_EQ(3, vtl.getValue(250)) << "The stored number should be returned when asking within the interval.";156}157158/* Tests what happens if one overwrites a value (three values stored, fillGaps called, order changed). */159TEST(ValueTimeLine, test_overwrite_collect2) {160ValueTimeLine<int> vtl;161vtl.add(50, 250, 2);162vtl.add(0, 100, 1);163vtl.add(200, 300, 3);164vtl.fillGaps(0);165EXPECT_EQ(1, vtl.getValue(0)) << "The stored number should be returned when asking within the interval.";166EXPECT_EQ(1, vtl.getValue(99)) << "The stored number should be returned when asking within the interval.";167EXPECT_EQ(1, vtl.getValue(50)) << "The stored number should be returned when asking within the interval.";168EXPECT_EQ(2, vtl.getValue(100)) << "The stored number should be returned when asking within the interval.";169EXPECT_EQ(2, vtl.getValue(199)) << "The stored number should be returned when asking within the interval.";170EXPECT_EQ(2, vtl.getValue(150)) << "The stored number should be returned when asking within the interval.";171EXPECT_EQ(3, vtl.getValue(200)) << "The stored number should be returned when asking within the interval.";172EXPECT_EQ(3, vtl.getValue(299)) << "The stored number should be returned when asking within the interval.";173EXPECT_EQ(3, vtl.getValue(250)) << "The stored number should be returned when asking within the interval.";174}175176177// --------------------------------178// gap filling tests179// --------------------------------180181/* Tests what happens if one overwrites a value (three values stored, fillGaps called). */182TEST(ValueTimeLine, test_fill_gaps_withbounds) {183ValueTimeLine<int> vtl;184vtl.add(50, 250, 2);185vtl.fillGaps(4, true);186EXPECT_EQ(2, vtl.getValue(0)) << "The stored number should be returned when asking within the interval.";187EXPECT_EQ(2, vtl.getValue(99)) << "The stored number should be returned when asking within the interval.";188EXPECT_EQ(2, vtl.getValue(50)) << "The stored number should be returned when asking within the interval.";189EXPECT_EQ(2, vtl.getValue(100)) << "The stored number should be returned when asking within the interval.";190EXPECT_EQ(2, vtl.getValue(199)) << "The stored number should be returned when asking within the interval.";191EXPECT_EQ(2, vtl.getValue(150)) << "The stored number should be returned when asking within the interval.";192EXPECT_EQ(2, vtl.getValue(200)) << "The stored number should be returned when asking within the interval.";193EXPECT_EQ(2, vtl.getValue(299)) << "The stored number should be returned when asking within the interval.";194EXPECT_EQ(2, vtl.getValue(250)) << "The stored number should be returned when asking within the interval.";195}196197198/* Tests what happens if one overwrites a value (three values stored, fillGaps called). */199TEST(ValueTimeLine, test_fill_gaps_nobounds) {200ValueTimeLine<int> vtl;201vtl.add(50, 250, 2);202vtl.fillGaps(4, false);203EXPECT_EQ(4, vtl.getValue(0)) << "The stored number should be returned when asking within the interval.";204EXPECT_EQ(2, vtl.getValue(99)) << "The stored number should be returned when asking within the interval.";205EXPECT_EQ(2, vtl.getValue(50)) << "The stored number should be returned when asking within the interval.";206EXPECT_EQ(2, vtl.getValue(100)) << "The stored number should be returned when asking within the interval.";207EXPECT_EQ(2, vtl.getValue(199)) << "The stored number should be returned when asking within the interval.";208EXPECT_EQ(2, vtl.getValue(150)) << "The stored number should be returned when asking within the interval.";209EXPECT_EQ(2, vtl.getValue(200)) << "The stored number should be returned when asking within the interval.";210EXPECT_EQ(4, vtl.getValue(299)) << "The stored number should be returned when asking within the interval.";211EXPECT_EQ(4, vtl.getValue(250)) << "The stored number should be returned when asking within the interval.";212}213214215