/
smychkov
/
SStorage
Обзор
Документация
Войти
/
smychkov
/
SStorage
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/test_compression.cpp
73 строки
3 KB
Андрей Смычков
feat: util varint, crc32c, murmur3, compression (snappy)
25 апр 2026, 09:00
25 апр 2026, 09:00
a7cf584
Код
Авторство
О чём код?
//============================================================================ // Тесты для компрессии (Snappy wrapper) //============================================================================ #include "../src/util/compression.hpp" #include <iostream> #include <string> using namespace sstorage::util; static int g_passed = 0; static int g_failed = 0; #define CHECK(cond) do { \ if (cond) { ++g_passed; } \ else { ++g_failed; std::cerr << "FAIL: " #cond " at line " << __LINE__ << "\n"; } \ } while (0) int main() { // Тип kNone — тривиальный pass-through { std::string input = "hello world"; std::string compressed; auto type = compress(input.data(), input.size(), compressed, CompressionType::kNone); CHECK(type == CompressionType::kNone); CHECK(compressed == input); std::string decompressed; CHECK(decompress(compressed.data(), compressed.size(), decompressed, CompressionType::kNone)); CHECK(decompressed == input); } // Snappy доступен → пробуем сжать хорошо сжимаемые данные if (snappyAvailable()) { // 10KB повторяющихся 'A' — отлично сжимается std::string input(10000, 'A'); std::string compressed; auto type = compress(input.data(), input.size(), compressed, CompressionType::kSnappy); CHECK(type == CompressionType::kSnappy); CHECK(compressed.size() < input.size() / 2); // ожидаем хорошую компрессию std::string decompressed; CHECK(decompress(compressed.data(), compressed.size(), decompressed, CompressionType::kSnappy)); CHECK(decompressed == input); } // Несжимаемые данные (random) — должен вернуться kNone if (snappyAvailable()) { std::string input; // Псевдослучайная последовательность, которая Snappy не сожмёт for (int i = 0; i < 1000; ++i) { input.push_back(static_cast<char>((i * 37 + 13) & 0xFF)); } std::string compressed; auto type = compress(input.data(), input.size(), compressed, CompressionType::kSnappy); // Возможно, что Snappy сожмёт даже это. Главное — roundtrip работает. std::string decompressed; CHECK(decompress(compressed.data(), compressed.size(), decompressed, type)); CHECK(decompressed == input); } // Пустой вход { std::string compressed; auto type = compress("", 0, compressed, CompressionType::kSnappy); std::string decompressed; CHECK(decompress(compressed.data(), compressed.size(), decompressed, type)); CHECK(decompressed.empty()); } std::cout << "test_compression: passed=" << g_passed << " failed=" << g_failed << "\n"; std::cout << " snappy available: " << (snappyAvailable() ? "yes" : "no") << "\n"; return g_failed == 0 ? 0 : 1; }