summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2017-02-02 11:27:22 +0000
committerHaavard <havardpe@yahoo-inc.com>2017-02-02 11:27:22 +0000
commitea810ce997ef0216771695496fb1165a81cb46b0 (patch)
tree3f480decd8809c9690e8cdf3a6df73e5ffcfc3fa /vespalib
parent78490a5deca54ed0d7d1d4f23d2946dcc0645266 (diff)
added test for output writer
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/data/output_writer/CMakeLists.txt8
-rw-r--r--vespalib/src/tests/data/output_writer/output_writer_test.cpp63
3 files changed, 72 insertions, 0 deletions
diff --git a/vespalib/CMakeLists.txt b/vespalib/CMakeLists.txt
index c5e568c103b..59e3cd29c0b 100644
--- a/vespalib/CMakeLists.txt
+++ b/vespalib/CMakeLists.txt
@@ -20,6 +20,7 @@ vespa_define_module(
src/tests/closure
src/tests/component
src/tests/compress
+ src/tests/data/output_writer
src/tests/data/simple_buffer
src/tests/delegatelist
src/tests/dotproduct
diff --git a/vespalib/src/tests/data/output_writer/CMakeLists.txt b/vespalib/src/tests/data/output_writer/CMakeLists.txt
new file mode 100644
index 00000000000..6507de2e6eb
--- /dev/null
+++ b/vespalib/src/tests/data/output_writer/CMakeLists.txt
@@ -0,0 +1,8 @@
+# Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(vespalib_output_writer_test_app TEST
+ SOURCES
+ output_writer_test.cpp
+ DEPENDS
+ vespalib
+)
+vespa_add_test(NAME vespalib_output_writer_test_app COMMAND vespalib_output_writer_test_app)
diff --git a/vespalib/src/tests/data/output_writer/output_writer_test.cpp b/vespalib/src/tests/data/output_writer/output_writer_test.cpp
new file mode 100644
index 00000000000..a7b00f40846
--- /dev/null
+++ b/vespalib/src/tests/data/output_writer/output_writer_test.cpp
@@ -0,0 +1,63 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/data/simple_buffer.h>
+#include <vespa/vespalib/data/output_writer.h>
+
+using namespace vespalib;
+
+TEST("output writer smoke test") {
+ SimpleBuffer buffer;
+ {
+ OutputWriter dst(buffer, 3);
+ dst.write('a');
+ dst.write('b');
+ dst.write('c');
+ dst.write('\n');
+ dst.write("foo bar", strlen("foo bar"));
+ dst.write('\n');
+ dst.printf("%d + %d = %d\n", 2, 2, 4);
+ }
+ vespalib::string expect = "abc\n"
+ "foo bar\n"
+ "2 + 2 = 4\n";
+ EXPECT_EQUAL(Memory(expect), buffer.get());
+}
+
+TEST("require that reserve/commit works as expected") {
+ SimpleBuffer buffer;
+ {
+ OutputWriter dst(buffer, 3);
+ char *p = dst.reserve(5);
+ p[0] = 'a';
+ p[1] = 'b';
+ p[2] = 'c';
+ dst.commit(3);
+ dst.reserve(1)[0] = '\n';
+ dst.commit(1);
+ dst.reserve(10);
+ }
+ vespalib::string expect = "abc\n";
+ EXPECT_EQUAL(Memory(expect), buffer.get());
+}
+
+TEST("require that large printf works") {
+ const char *str = "12345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890";
+ size_t str_len = strlen(str);
+ EXPECT_EQUAL(str_len, 200);
+ SimpleBuffer buffer;
+ {
+ OutputWriter dst(buffer, 3);
+ dst.printf("%s,%s,%s,%s", str, str, str, str);
+ }
+ ASSERT_EQUAL(buffer.get().size, (str_len * 4) + 3);
+ EXPECT_EQUAL(buffer.get().data[str_len], ',');
+ EXPECT_EQUAL(buffer.get().data[(2 * str_len) + 1], ',');
+ EXPECT_EQUAL(buffer.get().data[(3 * str_len) + 2], ',');
+ size_t offset = (buffer.get().size - str_len);
+ EXPECT_EQUAL(Memory(buffer.get().data + offset, buffer.get().size - offset), Memory(str));
+}
+
+TEST_MAIN() { TEST_RUN_ALL(); }