string: add tests for character_position
This commit is contained in:
parent
98e935d4d7
commit
e2eaa1a7af
@ -149,6 +149,12 @@ namespace cruft {
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
/// Calculate the line and column of an iterator within a view.
|
||||
///
|
||||
/// Returns an anonymous struct containing the line and column number.
|
||||
///
|
||||
/// The column number for newline is undefined. However it should never
|
||||
/// return the value {0,-1} and so it should not result in underruns when
|
||||
/// offsetting a pointer using the column index.
|
||||
template <typename IteratorT>
|
||||
auto
|
||||
character_position (
|
||||
|
@ -6,6 +6,39 @@
|
||||
#include <vector>
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void
|
||||
test_position (cruft::TAP::logger &tap)
|
||||
{
|
||||
char const *string = "a\nb\nc\n";
|
||||
|
||||
struct {
|
||||
int offset;
|
||||
|
||||
int line;
|
||||
int column;
|
||||
} TESTS[] = {
|
||||
{ 0, 0, 0 },
|
||||
{ 1, 1, -1 },
|
||||
{ 2, 1, 0 },
|
||||
{ 3, 2, -1 },
|
||||
{ 4, 2, 0 },
|
||||
{ 5, 3, -1 },
|
||||
};
|
||||
|
||||
for (auto const &t: TESTS) {
|
||||
auto const pos = cruft::character_position ({string, strlen(string) }, string + t.offset);
|
||||
|
||||
tap.expect (
|
||||
pos.line == t.line && pos.column == t.column,
|
||||
"character_position %!:%!",
|
||||
t.line,
|
||||
t.column
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void
|
||||
test_tokeniser (cruft::TAP::logger &tap)
|
||||
@ -43,6 +76,7 @@ main (int, char**)
|
||||
cruft::TAP::logger tap;
|
||||
|
||||
test_tokeniser (tap);
|
||||
test_position (tap);
|
||||
|
||||
return tap.status ();
|
||||
}
|
Loading…
Reference in New Issue
Block a user