62 #define DATA(...) { __VA_ARGS__ } 65 #define DEFLATE( name, FORMAT, COMPRESSED, EXPECTED ) \ 66 static const uint8_t name ## _compressed[] = COMPRESSED; \ 67 static const uint8_t name ## _expected[] = EXPECTED; \ 68 static struct deflate_test name = { \ 70 .compressed = name ## _compressed, \ 71 .compressed_len = sizeof ( name ## _compressed ), \ 72 .expected = name ## _expected, \ 73 .expected_len = sizeof ( name ## _expected ), \ 78 DATA ( 0x01, 0x00, 0x00, 0xff, 0xff ),
DATA() );
82 DATA ( 0x01, 0x04, 0x00, 0xfb, 0xff, 0x69, 0x50, 0x58, 0x45 ),
83 DATA ( 0x69, 0x50, 0x58, 0x45 ) );
87 DATA ( 0x00, 0x02, 0x00, 0xfd, 0xff, 0x69, 0x50, 0x01, 0x02, 0x00,
88 0xfd, 0xff, 0x58, 0x45 ),
89 DATA ( 0x69, 0x50, 0x58, 0x45 ) );
96 DATA ( 0xf3, 0x48, 0xcd, 0xc9, 0xc9, 0x57, 0x28, 0xcf, 0x2f, 0xca,
98 DATA ( 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c,
103 DATA ( 0xf3, 0x48, 0xcd, 0xc9, 0xc9, 0x57, 0xc8, 0x00, 0x93, 0xe5,
104 0xf9, 0x45, 0x39, 0x29, 0x00 ),
105 DATA ( 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x68, 0x65, 0x6c, 0x6c,
106 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64 ) );
110 DATA ( 0x0d, 0xc6, 0xdb, 0x09, 0x00, 0x21, 0x0c, 0x04, 0xc0, 0x56,
111 0xb6, 0x28, 0x1b, 0x08, 0x79, 0x70, 0x01, 0x35, 0xe2, 0xa6,
112 0x7f, 0xce, 0xf9, 0x9a, 0xf1, 0x25, 0xc1, 0xe3, 0x9a, 0x91,
113 0x2a, 0x9d, 0xb5, 0x61, 0x1e, 0xb9, 0x9d, 0x10, 0xcc, 0x22,
114 0xa7, 0x93, 0xd0, 0x5a, 0xe7, 0xbe, 0xb8, 0xc1, 0xa4, 0x05,
115 0x51, 0x77, 0x49, 0xff ),
116 DATA ( 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
117 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64,
118 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x61, 0x20, 0x6c,
119 0x6f, 0x73, 0x73, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x63, 0x6f,
120 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x64,
121 0x61, 0x74, 0x61, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74 ) );
125 DATA ( 0x78, 0x01, 0x8b, 0xf2, 0xf1, 0x74, 0x52, 0x70, 0xce, 0xcf,
126 0x2d, 0x28, 0x4a, 0x2d, 0x2e, 0x4e, 0x4d, 0x51, 0x70, 0x49,
127 0x2c, 0x49, 0x54, 0x70, 0xcb, 0x2f, 0xca, 0x4d, 0x2c, 0x51,
128 0x08, 0x2e, 0x48, 0x4d, 0xce, 0x4c, 0xcb, 0x4c, 0x4e, 0x2c,
129 0xc9, 0xcc, 0xcf, 0x03, 0x00, 0x2c, 0x0e, 0x0e, 0xeb ),
130 DATA ( 0x5a, 0x4c, 0x49, 0x42, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x72,
131 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x44, 0x61, 0x74, 0x61,
132 0x20, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x53, 0x70,
133 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
139 { { 0, 1, 5, -1UL, } },
140 { { 0, 0, 1, 0, 0, 1, -1UL } },
141 { { 10, 8, 4, 7, 11, -1UL } },
158 const char *file,
unsigned int line ) {
162 size_t frag_len = -1UL;
164 size_t remaining =
test->compressed_len;
174 for ( i = 0 ; i < (
sizeof (
frags->len ) /
175 sizeof (
frags->len[0] ) ) ; i++ ) {
179 frag_len =
frags->len[i];
180 if ( frag_len > remaining )
181 frag_len = remaining;
187 okx (
in.len == (
offset + frag_len ), file, line );
188 okx (
in.offset ==
in.len, file, line );
192 remaining -= frag_len;
203 okx (
out.offset ==
test->expected_len, file, line );
207 #define deflate_ok( deflate, test, frags ) \ 208 deflate_okx ( deflate, test, frags, __FILE__, __LINE__ ) int deflate_inflate(struct deflate *deflate, struct deflate_chunk *in, struct deflate_chunk *out)
Inflate compressed data.
Self-test infrastructure.
const char * name
Test set name.
#define DEFLATE(name, FORMAT, COMPRESSED, EXPECTED)
Define a DEFLATE test.
struct velocity_frag frags[7]
void deflate_init(struct deflate *deflate, enum deflate_format format)
Initialise decompressor.
#define okx(success, file, line)
Report test result.
static int deflate_finished(struct deflate *deflate)
Check if decompression has finished.
static void(* free)(struct refcnt *refcnt))
deflate_format
Compression formats.
void * malloc(size_t size)
Allocate memory.
const void * expected
Expected uncompressed data.
#define DATA(...)
Define inline data.
#define deflate_ok(deflate, test, frags)
const void * compressed
Compressed data.
Raw DEFLATE data (no header or footer)
static void deflate_okx(struct deflate *deflate, struct deflate_test *test, struct deflate_test_fragments *frags, const char *file, unsigned int line)
Report DEFLATE test result.
userptr_t virt_to_user(volatile const void *addr)
Convert virtual address to user pointer.
enum deflate_format format
Compression format.
uint8_t data[48]
Additional event data.
uint16_t offset
Offset to command line.
size_t len[8]
Fragment lengths.
DEFLATE decompression algorithm.
static struct deflate_test_fragments zlib_fragments[]
static void deflate_test_exec(void)
Perform DEFLATE self-test.
struct self_test deflate_test __self_test
DEFLATE self-test.
size_t expected_len
Length of expected uncompressed data.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
#define NULL
NULL pointer (VOID *)
size_t compressed_len
Length of compressed data.