summaryrefslogtreecommitdiff
path: root/unittest/test_compr_none.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unittest/test_compr_none.cpp')
-rw-r--r--unittest/test_compr_none.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/unittest/test_compr_none.cpp b/unittest/test_compr_none.cpp
new file mode 100644
index 00000000..76411e7b
--- /dev/null
+++ b/unittest/test_compr_none.cpp
@@ -0,0 +1,68 @@
+// Copyright (C) 2019 Joel Rosdahl and other contributors
+//
+// See doc/AUTHORS.adoc for a complete list of contributors.
+//
+// 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, write to the Free Software Foundation, Inc., 51
+// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+#include "../src/compression.hpp"
+#include "framework.hpp"
+#include "util.hpp"
+
+TEST_SUITE(compr_type_none)
+
+TEST(small_roundtrip)
+{
+ const uint64_t expected_foobar_checksum = 0xa2aa05ed9085aaf9ULL;
+
+ XXH64_state_t *checksum = XXH64_createState();
+ XXH64_reset(checksum, 0);
+
+ FILE *f = fopen("data.uncompressed", "w");
+ struct compressor *compr_none = compressor_from_type(COMPR_TYPE_NONE);
+ struct compr_state *c_state = compr_none->init(f, -1, checksum);
+ CHECK(c_state);
+
+ CHECK(compr_none->write(c_state, "foobar", 6));
+
+ CHECK(compr_none->free(c_state));
+ fclose(f);
+
+ CHECK_INT_EQ(XXH64_digest(checksum), expected_foobar_checksum);
+
+ XXH64_reset(checksum, 0);
+ f = fopen("data.uncompressed", "r");
+ struct decompressor *decompr_none = decompressor_from_type(COMPR_TYPE_NONE);
+ struct decompr_state *d_state = decompr_none->init(f, checksum);
+ CHECK(d_state);
+
+ char buffer[4];
+ CHECK(decompr_none->read(d_state, buffer, 4));
+ CHECK(memcmp(buffer, "foob", 4) == 0);
+ CHECK(decompr_none->read(d_state, buffer, 2));
+ CHECK(memcmp(buffer, "ar", 2) == 0);
+
+ // Nothing left to read.
+ CHECK(!decompr_none->read(d_state, buffer, 1));
+
+ // Error state is remembered.
+ CHECK(!decompr_none->free(d_state));
+ fclose(f);
+
+ CHECK_INT_EQ(XXH64_digest(checksum), expected_foobar_checksum);
+
+ XXH64_freeState(checksum);
+}
+
+TEST_SUITE_END