summaryrefslogtreecommitdiff
path: root/unittest
diff options
context:
space:
mode:
authorJoel Rosdahl <joel@rosdahl.net>2022-09-11 13:27:40 +0200
committerJoel Rosdahl <joel@rosdahl.net>2022-09-21 17:06:29 +0200
commite8def923d74dc68b4bbcb80177563f8ff23b5767 (patch)
tree92124bdc807b11d60f9b86e0c66d57f70d95ebef /unittest
parent00ccae9a61fd8fc6631baf4675e77f34fd17d747 (diff)
downloadccache-e8def923d74dc68b4bbcb80177563f8ff23b5767.tar.gz
enhance: Add util::zstd_* functions
Diffstat (limited to 'unittest')
-rw-r--r--unittest/test_util_zstd.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/unittest/test_util_zstd.cpp b/unittest/test_util_zstd.cpp
new file mode 100644
index 00000000..96250175
--- /dev/null
+++ b/unittest/test_util_zstd.cpp
@@ -0,0 +1,77 @@
+// Copyright (C) 2019-2022 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 <TestUtil.hpp>
+#include <util/Bytes.hpp>
+#include <util/zstd.hpp>
+
+#include <third_party/doctest.h>
+
+#include <string>
+
+using TestUtil::TestContext;
+
+const util::Bytes compressed_ab{
+ 0x28, 0xb5, 0x2f, 0xfd, 0x20, 0x02, 0x11, 0x00, 0x00, 0x61, 0x62};
+
+TEST_CASE("util::zstd_compress")
+{
+ TestContext test_context;
+
+ util::Bytes output{'x'};
+ auto result = util::zstd_compress(util::Bytes{'a', 'b'}, output, 1);
+ CHECK(result);
+ CHECK(output.size() == 12);
+ util::Bytes expected{'x'};
+ expected.insert(expected.end(), compressed_ab.begin(), compressed_ab.end());
+ CHECK(output == expected);
+}
+
+TEST_CASE("util::zstd_decompress")
+{
+ TestContext test_context;
+
+ util::Bytes input = compressed_ab;
+ util::Bytes output{'x'};
+ auto result = util::zstd_decompress(input, output, 2);
+ CHECK(result);
+ CHECK(output == util::Bytes{'x', 'a', 'b'});
+}
+
+TEST_CASE("ZSTD roundtrip")
+{
+ TestContext test_context;
+
+ const util::Bytes data{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+ const size_t copies = 10000;
+ util::Bytes original_input;
+ for (size_t i = 0; i < copies; i++) {
+ original_input.insert(original_input.end(), data.begin(), data.end());
+ }
+
+ util::Bytes output;
+ auto result = util::zstd_compress(original_input, output, 1);
+ CHECK(result);
+ CHECK(output.size() < 100);
+
+ util::Bytes decompressed_input;
+ result =
+ util::zstd_decompress(output, decompressed_input, copies * data.size());
+ CHECK(result);
+ CHECK(decompressed_input == original_input);
+}