OLD | NEW |
(Empty) | |
| 1 /////////////////////////////////////////////////////////////////////////////// |
| 2 // |
| 3 /// \file tests.h |
| 4 /// \brief Common definitions for test applications |
| 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 // |
| 11 /////////////////////////////////////////////////////////////////////////////// |
| 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 |
| 20 #include <stdio.h> |
| 21 |
| 22 #define memcrap(buf, size) memset(buf, 0xFD, size) |
| 23 |
| 24 #define expect(test) ((test) ? 0 : (fprintf(stderr, "%s:%d: %s\n", \ |
| 25 __FILE__, __LINE__, #test), abort(), 0)) |
| 26 |
| 27 #define succeed(test) expect(!(test)) |
| 28 |
| 29 #define fail(test) expect(test) |
| 30 |
| 31 |
| 32 static inline const char * |
| 33 lzma_ret_sym(lzma_ret ret) |
| 34 { |
| 35 if ((unsigned int)(ret) > LZMA_PROG_ERROR) |
| 36 return "UNKNOWN_ERROR"; |
| 37 |
| 38 static const char *msgs[] = { |
| 39 "LZMA_OK", |
| 40 "LZMA_STREAM_END", |
| 41 "LZMA_NO_CHECK", |
| 42 "LZMA_UNSUPPORTED_CHECK", |
| 43 "LZMA_GET_CHECK", |
| 44 "LZMA_MEM_ERROR", |
| 45 "LZMA_MEMLIMIT_ERROR", |
| 46 "LZMA_FORMAT_ERROR", |
| 47 "LZMA_OPTIONS_ERROR", |
| 48 "LZMA_DATA_ERROR", |
| 49 "LZMA_BUF_ERROR", |
| 50 "LZMA_PROG_ERROR" |
| 51 }; |
| 52 |
| 53 return msgs[ret]; |
| 54 } |
| 55 |
| 56 |
| 57 static inline bool |
| 58 coder_loop(lzma_stream *strm, uint8_t *in, size_t in_size, |
| 59 uint8_t *out, size_t out_size, |
| 60 lzma_ret expected_ret, lzma_action finishing_action) |
| 61 { |
| 62 size_t in_left = in_size; |
| 63 size_t out_left = out_size > 0 ? out_size + 1 : 0; |
| 64 lzma_action action = LZMA_RUN; |
| 65 lzma_ret ret; |
| 66 |
| 67 strm->next_in = NULL; |
| 68 strm->avail_in = 0; |
| 69 strm->next_out = NULL; |
| 70 strm->avail_out = 0; |
| 71 |
| 72 while (true) { |
| 73 if (in_left > 0) { |
| 74 if (--in_left == 0) |
| 75 action = finishing_action; |
| 76 |
| 77 strm->next_in = in++; |
| 78 strm->avail_in = 1; |
| 79 } |
| 80 |
| 81 if (out_left > 0) { |
| 82 --out_left; |
| 83 strm->next_out = out++; |
| 84 strm->avail_out = 1; |
| 85 } |
| 86 |
| 87 ret = lzma_code(strm, action); |
| 88 if (ret != LZMA_OK) |
| 89 break; |
| 90 } |
| 91 |
| 92 bool error = false; |
| 93 |
| 94 if (ret != expected_ret) |
| 95 error = true; |
| 96 |
| 97 if (expected_ret == LZMA_STREAM_END) { |
| 98 if (strm->total_in != in_size || strm->total_out != out_size) |
| 99 error = true; |
| 100 } else { |
| 101 if (strm->total_in != in_size || strm->total_out != out_size) |
| 102 error = true; |
| 103 } |
| 104 |
| 105 return error; |
| 106 } |
| 107 |
| 108 |
| 109 static inline bool |
| 110 decoder_loop_ret(lzma_stream *strm, uint8_t *in, size_t in_size, |
| 111 lzma_ret expected_ret) |
| 112 { |
| 113 return coder_loop(strm, in, in_size, NULL, 0, expected_ret, LZMA_RUN); |
| 114 } |
| 115 |
| 116 |
| 117 static inline bool |
| 118 decoder_loop(lzma_stream *strm, uint8_t *in, size_t in_size) |
| 119 { |
| 120 return coder_loop(strm, in, in_size, NULL, 0, |
| 121 LZMA_STREAM_END, LZMA_RUN); |
| 122 } |
| 123 |
| 124 #endif |
OLD | NEW |