diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-02-22 23:00:53 +0100 |
---|---|---|
committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-02-22 23:00:53 +0100 |
commit | fcae5902752245e87b9f92583d7ab585555460cb (patch) | |
tree | e320095390033a0371f9ed2d9f81174cd4a6f803 /test | |
parent | 0c93e83fdd8d1adb3f2ed5a1767823ab821815c4 (diff) |
Implemented SourceOffsetVector -- a class for storing the SourceOffset for each character in a sequence in an fairly efficient manner
Diffstat (limited to 'test')
-rw-r--r-- | test/core/parser/utils/SourceOffsetVectorTest.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>. +*/ + +#include <gtest/gtest.h> + +#include <core/parser/utils/SourceOffsetVector.hpp> + +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); +} +} |