From fcae5902752245e87b9f92583d7ab585555460cb Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Sun, 22 Feb 2015 23:00:53 +0100 Subject: Implemented SourceOffsetVector -- a class for storing the SourceOffset for each character in a sequence in an fairly efficient manner --- test/core/parser/utils/SourceOffsetVectorTest.cpp | 64 +++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 test/core/parser/utils/SourceOffsetVectorTest.cpp (limited to 'test/core/parser/utils') diff --git a/test/core/parser/utils/SourceOffsetVectorTest.cpp b/test/core/parser/utils/SourceOffsetVectorTest.cpp new file mode 100644 index 0000000..25a4163 --- /dev/null +++ b/test/core/parser/utils/SourceOffsetVectorTest.cpp @@ -0,0 +1,64 @@ +/* + Ousía + Copyright (C) 2014 Benjamin Paaßen, Andreas Stöckel + + This program is free software: you can redistribute it 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 + +#include + +namespace ousia { + +TEST(SourceOffsetVector, simple) +{ + SourceOffsetVector vec; + + for (size_t i = 0; i < 1000; i++) { + vec.storeOffset(i * 3 + 5, (i + 1) * 3 + 5); + } + + for (size_t i = 0; i < 1000; i++) { + auto elem = vec.loadOffset(i); + EXPECT_EQ(i * 3 + 5, elem.first); + EXPECT_EQ((i + 1) * 3 + 5, elem.second); + } + auto elem = vec.loadOffset(1000); + EXPECT_EQ(1000U * 3 + 5, elem.first); + EXPECT_EQ(1000U * 3 + 5, elem.second); +} + +TEST(SourceOffsetVector, gaps) +{ + SourceOffsetVector vec; + + for (size_t i = 0; i < 1000; i++) { + vec.storeOffset(i * 3 + 5, i * 3 + 7); + } + + for (size_t i = 0; i < 999; i++) { + auto elem = vec.loadOffset(i); + EXPECT_EQ(i * 3 + 5, elem.first); + EXPECT_EQ((i + 1) * 3 + 5, elem.second); + } + auto elem = vec.loadOffset(999); + EXPECT_EQ(999U * 3 + 5, elem.first); + EXPECT_EQ(999U * 3 + 7, elem.second); + + elem = vec.loadOffset(1000); + EXPECT_EQ(999U * 3 + 7, elem.first); + EXPECT_EQ(999U * 3 + 7, elem.second); +} +} -- cgit v1.2.3