test_miniz.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include <stdio.h>
  2. #include "esp32/rom/miniz.h"
  3. #include "unity.h"
  4. #define DATASIZE (1024*64)
  5. TEST_CASE("Test miniz compression/decompression", "[miniz][ignore]")
  6. {
  7. int x;
  8. char b;
  9. char *inbuf, *outbuf;
  10. tdefl_compressor *comp;
  11. tinfl_decompressor *decomp;
  12. tdefl_status status;
  13. size_t inbytes = 0, outbytes = 0, inpos = 0, outpos = 0, compsz;
  14. printf("Allocating data buffer and filling it with semi-random data\n");
  15. inbuf = malloc(DATASIZE);
  16. TEST_ASSERT(inbuf != NULL);
  17. srand(0);
  18. for (x = 0; x < DATASIZE; x++) {
  19. inbuf[x] = (x & 1) ? rand() & 0xff : 0;
  20. }
  21. printf("Allocating compressor & outbuf (%d bytes)\n", sizeof(tdefl_compressor));
  22. comp = malloc(sizeof(tdefl_compressor));
  23. TEST_ASSERT(comp != NULL);
  24. outbuf = malloc(DATASIZE);
  25. TEST_ASSERT(outbuf != NULL);
  26. printf("Compressing...\n");
  27. status = tdefl_init(comp, NULL, NULL, TDEFL_WRITE_ZLIB_HEADER | 1500);
  28. TEST_ASSERT(status == TDEFL_STATUS_OKAY);
  29. while (inbytes != DATASIZE) {
  30. outbytes = DATASIZE - outpos;
  31. inbytes = DATASIZE - inpos;
  32. tdefl_compress(comp, &inbuf[inpos], &inbytes, &outbuf[outpos], &outbytes, TDEFL_FINISH);
  33. printf("...Compressed %d into %d bytes\n", inbytes, outbytes);
  34. inpos += inbytes; outpos += outbytes;
  35. }
  36. compsz = outpos;
  37. free(comp);
  38. //Kill inbuffer
  39. for (x = 0; x < DATASIZE; x++) {
  40. inbuf[x] = 0;
  41. }
  42. free(inbuf);
  43. inbuf = outbuf;
  44. outbuf = malloc(DATASIZE);
  45. TEST_ASSERT(outbuf != NULL);
  46. printf("Reinflating...\n");
  47. decomp = malloc(sizeof(tinfl_decompressor));
  48. TEST_ASSERT(decomp != NULL);
  49. tinfl_init(decomp);
  50. inpos = 0; outpos = 0;
  51. while (inbytes != compsz) {
  52. outbytes = DATASIZE - outpos;
  53. inbytes = compsz - inpos;
  54. tinfl_decompress(decomp, (const mz_uint8 *)&inbuf[inpos], &inbytes, (uint8_t *)outbuf, (mz_uint8 *)&outbuf[outpos], &outbytes, TINFL_FLAG_PARSE_ZLIB_HEADER);
  55. printf("...Decompressed %d into %d bytes\n", inbytes, outbytes);
  56. inpos += inbytes; outpos += outbytes;
  57. }
  58. printf("Checking if same...\n");
  59. srand(0);
  60. for (x = 0; x < DATASIZE; x++) {
  61. b = (x & 1) ? rand() & 0xff : 0;
  62. if (outbuf[x] != b) {
  63. printf("Pos %x: %hhx!=%hhx\n", x, outbuf[x], b);
  64. TEST_ASSERT(0);
  65. }
  66. }
  67. printf("Great Success!\n");
  68. free(inbuf);
  69. free(outbuf);
  70. free(decomp);
  71. }