/
smychkov
/
SStorage
Обзор
Документация
Войти
/
smychkov
/
SStorage
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/test_crc32c.cpp
55 строк
2 KB
Андрей Смычков
feat: util varint, crc32c, murmur3, compression (snappy)
25 апр 2026, 09:00
25 апр 2026, 09:00
a7cf584
Код
Авторство
О чём код?
//============================================================================ // Тесты для CRC-32C (Castagnoli) //============================================================================ #include "../src/util/crc32c.hpp" #include <cassert> #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() { // Пустой буфер — CRC = 0 CHECK(crc32c("", 0) == 0); // Известный тест-вектор из RFC 3720 (iSCSI): "123456789" -> 0xE3069283 CHECK(crc32c("123456789", 9) == 0xE3069283); // "a" -> 0xC1D04330 CHECK(crc32c("a", 1) == 0xC1D04330); // Одинаковые входы дают одинаковые выходы (детерминизм) CHECK(crc32c("hello", 5) == crc32c("hello", 5)); // Разные входы дают разные выходы (коллизий нет на простых) CHECK(crc32c("hello", 5) != crc32c("world", 5)); // Инкрементальный подсчёт == цельный { uint32_t full = crc32c("hello world", 11); uint32_t part = crc32cExtend(0, "hello ", 6); part = crc32cExtend(part, "world", 5); CHECK(full == part); } // Большой буфер (проверяем, что нет переполнения) { std::string big(10000, 'X'); uint32_t crc = crc32c(big); CHECK(crc != 0); } // Обёртка для std::string CHECK(crc32c(std::string("123456789")) == 0xE3069283); std::cout << "test_crc32c: passed=" << g_passed << " failed=" << g_failed << "\n"; return g_failed == 0 ? 0 : 1; }