Files
deusdata--codebase-memory-mcp/tests/test_zstd.c
T
wehub-resource-sync 41cb1c0170
OpenSSF Scorecard / scorecard (push) Failing after 0s
DCO / dco (push) Failing after 0s
CodeQL SAST / analyze (push) Failing after 1s
Deploy Pages / deploy (push) Failing after 1s
chore: import upstream snapshot with attribution
2026-07-13 12:28:05 +08:00

118 lines
3.1 KiB
C

/*
* test_zstd.c — Tests for zstd compression wrappers.
*/
#include "test_framework.h"
extern int cbm_zstd_compress(const char *src, int srcLen, char *dst, int dstCap, int level);
extern int cbm_zstd_decompress(const char *src, int srcLen, char *dst, int dstCap);
extern size_t cbm_zstd_compress_bound(int inputSize);
TEST(zstd_roundtrip) {
const char *data = "Hello, zstd compression roundtrip test!";
int len = (int)strlen(data);
size_t bound = cbm_zstd_compress_bound(len);
ASSERT_GT((int)bound, 0);
char *cbuf = malloc(bound);
ASSERT_NOT_NULL(cbuf);
int clen = cbm_zstd_compress(data, len, cbuf, (int)bound, 3);
ASSERT_GT(clen, 0);
char *dbuf = malloc(len);
ASSERT_NOT_NULL(dbuf);
int dlen = cbm_zstd_decompress(cbuf, clen, dbuf, len);
ASSERT_EQ(dlen, len);
ASSERT_MEM_EQ(dbuf, data, len);
free(cbuf);
free(dbuf);
PASS();
}
TEST(zstd_roundtrip_large) {
int len = 100000;
char *data = malloc(len);
ASSERT_NOT_NULL(data);
/* Repetitive data — should compress well */
for (int i = 0; i < len; i++) {
data[i] = "function_name_pattern_abcdef"[i % 28];
}
size_t bound = cbm_zstd_compress_bound(len);
char *cbuf = malloc(bound);
ASSERT_NOT_NULL(cbuf);
int clen = cbm_zstd_compress(data, len, cbuf, (int)bound, 9);
ASSERT_GT(clen, 0);
/* Repetitive data should compress at least 2:1 */
ASSERT_LT(clen, len / 2);
char *dbuf = malloc(len);
ASSERT_NOT_NULL(dbuf);
int dlen = cbm_zstd_decompress(cbuf, clen, dbuf, len);
ASSERT_EQ(dlen, len);
ASSERT_MEM_EQ(dbuf, data, len);
free(data);
free(cbuf);
free(dbuf);
PASS();
}
TEST(zstd_compress_levels) {
const char *data = "test data for different compression levels";
int len = (int)strlen(data);
size_t bound = cbm_zstd_compress_bound(len);
char *cbuf = malloc(bound);
ASSERT_NOT_NULL(cbuf);
/* Both level 3 (fast) and level 9 (best) should produce valid output */
int clen3 = cbm_zstd_compress(data, len, cbuf, (int)bound, 3);
ASSERT_GT(clen3, 0);
int clen9 = cbm_zstd_compress(data, len, cbuf, (int)bound, 9);
ASSERT_GT(clen9, 0);
free(cbuf);
PASS();
}
TEST(zstd_decompress_too_small_output) {
const char *data = "this is test data that will be compressed";
int len = (int)strlen(data);
size_t bound = cbm_zstd_compress_bound(len);
char *cbuf = malloc(bound);
ASSERT_NOT_NULL(cbuf);
int clen = cbm_zstd_compress(data, len, cbuf, (int)bound, 3);
ASSERT_GT(clen, 0);
/* Try decompressing with too-small output buffer — should return 0 (error) */
char small[4];
int dlen = cbm_zstd_decompress(cbuf, clen, small, 4);
ASSERT_EQ(dlen, 0);
free(cbuf);
PASS();
}
TEST(zstd_bound_positive) {
ASSERT_GT((int)cbm_zstd_compress_bound(1), 0);
ASSERT_GT((int)cbm_zstd_compress_bound(100), 0);
ASSERT_GT((int)cbm_zstd_compress_bound(1000000), 0);
PASS();
}
SUITE(zstd) {
RUN_TEST(zstd_roundtrip);
RUN_TEST(zstd_roundtrip_large);
RUN_TEST(zstd_compress_levels);
RUN_TEST(zstd_decompress_too_small_output);
RUN_TEST(zstd_bound_positive);
}