Parolin 0.7.9 6796
Console (soon DLLs) to do a tar like job
Loading...
Searching...
No Matches
tests.h
Go to the documentation of this file.
1
2//
5//
6// Author: Lasse Collin
7//
8// This file has been put into the public domain.
9// You can do whatever you want with this file.
10//
12
13#ifndef LZMA_TESTS_H
14#define LZMA_TESTS_H
15
16#include "sysdefs.h"
17#include "tuklib_integer.h"
18#include "lzma.h"
19#include "tuktest.h"
20
21
22#define memcrap(buf, size) memset(buf, 0xFD, size)
23
24
25// TODO: Remove these three macros once all tests have been converted.
26#define expect(test) ((test) ? 0 : (fprintf(stderr, "%s:%d: %s\n", \
27 __FILE__, __LINE__, #test), abort(), 0))
28
29#define succeed(test) expect(!(test))
30
31#define fail(test) expect(test)
32
33
34// This table and macro allow getting more readable error messages when
35// comparing the lzma_ret enumeration values.
36static const char enum_strings_lzma_ret[][24] = {
37 "LZMA_OK",
38 "LZMA_STREAM_END",
39 "LZMA_NO_CHECK",
40 "LZMA_UNSUPPORTED_CHECK",
41 "LZMA_GET_CHECK",
42 "LZMA_MEM_ERROR",
43 "LZMA_MEMLIMIT_ERROR",
44 "LZMA_FORMAT_ERROR",
45 "LZMA_OPTIONS_ERROR",
46 "LZMA_DATA_ERROR",
47 "LZMA_BUF_ERROR",
48 "LZMA_PROG_ERROR",
49 "LZMA_SEEK_NEEDED",
50};
51
52#define assert_lzma_ret(test_expr, ref_val) \
53 assert_enum_eq(test_expr, ref_val, enum_strings_lzma_ret)
54
55
56static const char enum_strings_lzma_check[][24] = {
57 "LZMA_CHECK_NONE",
58 "LZMA_CHECK_CRC32",
59 "LZMA_CHECK_UNKNOWN_2",
60 "LZMA_CHECK_UNKNOWN_3",
61 "LZMA_CHECK_CRC64",
62 "LZMA_CHECK_UNKNOWN_5",
63 "LZMA_CHECK_UNKNOWN_6",
64 "LZMA_CHECK_UNKNOWN_7",
65 "LZMA_CHECK_UNKNOWN_8",
66 "LZMA_CHECK_UNKNOWN_9",
67 "LZMA_CHECK_SHA256",
68 "LZMA_CHECK_UNKNOWN_11",
69 "LZMA_CHECK_UNKNOWN_12",
70 "LZMA_CHECK_UNKNOWN_13",
71 "LZMA_CHECK_UNKNOWN_14",
72 "LZMA_CHECK_UNKNOWN_15",
73};
74
75#define assert_lzma_check(test_expr, ref_val) \
76 assert_enum_eq(test_expr, ref_val, enum_strings_lzma_check)
77
78
79static inline bool
80coder_loop(lzma_stream *strm, uint8_t *in, size_t in_size,
81 uint8_t *out, size_t out_size,
82 lzma_ret expected_ret, lzma_action finishing_action)
83{
84 size_t in_left = in_size;
85 size_t out_left = out_size > 0 ? out_size + 1 : 0;
86 lzma_action action = LZMA_RUN;
88
89 strm->next_in = NULL;
90 strm->avail_in = 0;
91 strm->next_out = NULL;
92 strm->avail_out = 0;
93
94 while (true) {
95 if (in_left > 0) {
96 if (--in_left == 0)
97 action = finishing_action;
98
99 strm->next_in = in++;
100 strm->avail_in = 1;
101 }
102
103 if (out_left > 0) {
104 --out_left;
105 strm->next_out = out++;
106 strm->avail_out = 1;
107 }
108
109 ret = lzma_code(strm, action);
110 if (ret != LZMA_OK)
111 break;
112 }
113
114 bool error = false;
115
116 if (ret != expected_ret)
117 error = true;
118
119 if (strm->total_in != in_size || strm->total_out != out_size)
120 error = true;
121
122 return error;
123}
124
125
126static inline bool
127decoder_loop_ret(lzma_stream *strm, uint8_t *in, size_t in_size,
128 lzma_ret expected_ret)
129{
130 return coder_loop(strm, in, in_size, NULL, 0, expected_ret, LZMA_RUN);
131}
132
133
134static inline bool
135decoder_loop(lzma_stream *strm, uint8_t *in, size_t in_size)
136{
137 return coder_loop(strm, in, in_size, NULL, 0,
139}
140
141#endif
Passing data to and from liblzma.
Definition base.h:485
size_t avail_out
Definition base.h:491
size_t avail_in
Definition base.h:487
uint64_t total_in
Definition base.h:488
uint64_t total_out
Definition base.h:492
uint8_t * next_out
Definition base.h:490
const uint8_t * next_in
Definition base.h:486
lzma_ret
Return values used by several functions in liblzma.
Definition base.h:57
@ LZMA_STREAM_END
End of stream was reached.
Definition base.h:63
@ LZMA_OK
Operation completed successfully.
Definition base.h:58
lzma_action
The ‘action’ argument for lzma_code()
Definition base.h:250
@ LZMA_RUN
Continue coding.
Definition base.h:251
const lzma_allocator const uint8_t size_t in_size
Definition block.h:527
const lzma_allocator const uint8_t * in
Definition block.h:527
const lzma_allocator const uint8_t size_t uint8_t * out
Definition block.h:528
#define NULL
Definition getopt1.c:37
Helper macros for writing simple test programs.
ret
Definition zlib_interface.c:30
void error(char *msg) const
Definition minigzip.c:356