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); +} +} | 
