xref: /aosp_15_r20/external/lz4/tests/decompress-partial-usingDict.c (revision 27162e4e17433d5aa7cb38e7b6a433a09405fc7f)
1*27162e4eSAndroid Build Coastguard Worker #include <stdlib.h>
2*27162e4eSAndroid Build Coastguard Worker #include <string.h>
3*27162e4eSAndroid Build Coastguard Worker #include <stdio.h>
4*27162e4eSAndroid Build Coastguard Worker #include <assert.h>
5*27162e4eSAndroid Build Coastguard Worker #include "lz4.h"
6*27162e4eSAndroid Build Coastguard Worker 
7*27162e4eSAndroid Build Coastguard Worker const char source[] =
8*27162e4eSAndroid Build Coastguard Worker   "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod\n"
9*27162e4eSAndroid Build Coastguard Worker   "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim\n"
10*27162e4eSAndroid Build Coastguard Worker   "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea\n"
11*27162e4eSAndroid Build Coastguard Worker   "commodo consequat. Duis aute irure dolor in reprehenderit in voluptate\n"
12*27162e4eSAndroid Build Coastguard Worker   "velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat\n"
13*27162e4eSAndroid Build Coastguard Worker   "cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id\n"
14*27162e4eSAndroid Build Coastguard Worker   "est laborum.\n"
15*27162e4eSAndroid Build Coastguard Worker   "\n"
16*27162e4eSAndroid Build Coastguard Worker   "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium\n"
17*27162e4eSAndroid Build Coastguard Worker   "doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore\n"
18*27162e4eSAndroid Build Coastguard Worker   "veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim\n"
19*27162e4eSAndroid Build Coastguard Worker   "ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia\n"
20*27162e4eSAndroid Build Coastguard Worker   "consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque\n"
21*27162e4eSAndroid Build Coastguard Worker   "porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur,\n"
22*27162e4eSAndroid Build Coastguard Worker   "adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore\n"
23*27162e4eSAndroid Build Coastguard Worker   "et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis\n"
24*27162e4eSAndroid Build Coastguard Worker   "nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid\n"
25*27162e4eSAndroid Build Coastguard Worker   "ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea\n"
26*27162e4eSAndroid Build Coastguard Worker   "voluptate velit esse quam nihil molestiae consequatur, vel illum qui\n"
27*27162e4eSAndroid Build Coastguard Worker   "dolorem eum fugiat quo voluptas nulla pariatur?\n";
28*27162e4eSAndroid Build Coastguard Worker 
29*27162e4eSAndroid Build Coastguard Worker #define BUFFER_SIZE 2048
30*27162e4eSAndroid Build Coastguard Worker 
main(void)31*27162e4eSAndroid Build Coastguard Worker int main(void)
32*27162e4eSAndroid Build Coastguard Worker {
33*27162e4eSAndroid Build Coastguard Worker   int srcLen = (int)strlen(source);
34*27162e4eSAndroid Build Coastguard Worker   size_t const smallSize = 1024;
35*27162e4eSAndroid Build Coastguard Worker   size_t const largeSize = 64 * 1024 - 1;
36*27162e4eSAndroid Build Coastguard Worker   char cmpBuffer[BUFFER_SIZE];
37*27162e4eSAndroid Build Coastguard Worker   char* const buffer = (char*)malloc(BUFFER_SIZE + largeSize);
38*27162e4eSAndroid Build Coastguard Worker   char* outBuffer = buffer + largeSize;
39*27162e4eSAndroid Build Coastguard Worker   char* const dict = (char*)malloc(largeSize);
40*27162e4eSAndroid Build Coastguard Worker   char* const largeDict = dict;
41*27162e4eSAndroid Build Coastguard Worker   char* const smallDict = dict + largeSize - smallSize;
42*27162e4eSAndroid Build Coastguard Worker   int i;
43*27162e4eSAndroid Build Coastguard Worker   int cmpSize;
44*27162e4eSAndroid Build Coastguard Worker 
45*27162e4eSAndroid Build Coastguard Worker   printf("starting test decompress-partial-usingDict : \n");
46*27162e4eSAndroid Build Coastguard Worker   assert(buffer != NULL);
47*27162e4eSAndroid Build Coastguard Worker   assert(dict != NULL);
48*27162e4eSAndroid Build Coastguard Worker 
49*27162e4eSAndroid Build Coastguard Worker   cmpSize = LZ4_compress_default(source, cmpBuffer, srcLen, BUFFER_SIZE);
50*27162e4eSAndroid Build Coastguard Worker 
51*27162e4eSAndroid Build Coastguard Worker   for (i = cmpSize; i < cmpSize + 10; ++i) {
52*27162e4eSAndroid Build Coastguard Worker     int result = LZ4_decompress_safe_partial_usingDict(cmpBuffer, outBuffer, i, srcLen, BUFFER_SIZE, NULL, 0);
53*27162e4eSAndroid Build Coastguard Worker     if ( (result < 0)
54*27162e4eSAndroid Build Coastguard Worker       || (result != srcLen)
55*27162e4eSAndroid Build Coastguard Worker       || memcmp(source, outBuffer, (size_t)srcLen) ) {
56*27162e4eSAndroid Build Coastguard Worker       printf("test decompress-partial-usingDict with no dict error \n");
57*27162e4eSAndroid Build Coastguard Worker       return -1;
58*27162e4eSAndroid Build Coastguard Worker     }
59*27162e4eSAndroid Build Coastguard Worker   }
60*27162e4eSAndroid Build Coastguard Worker 
61*27162e4eSAndroid Build Coastguard Worker   for (i = cmpSize; i < cmpSize + 10; ++i) {
62*27162e4eSAndroid Build Coastguard Worker     int result = LZ4_decompress_safe_partial_usingDict(cmpBuffer, outBuffer, i, srcLen, BUFFER_SIZE, outBuffer - smallSize, smallSize);
63*27162e4eSAndroid Build Coastguard Worker     if ( (result < 0)
64*27162e4eSAndroid Build Coastguard Worker       || (result != srcLen)
65*27162e4eSAndroid Build Coastguard Worker       || memcmp(source, outBuffer, (size_t)srcLen) ) {
66*27162e4eSAndroid Build Coastguard Worker       printf("test decompress-partial-usingDict with small prefix error \n");
67*27162e4eSAndroid Build Coastguard Worker       return -1;
68*27162e4eSAndroid Build Coastguard Worker     }
69*27162e4eSAndroid Build Coastguard Worker   }
70*27162e4eSAndroid Build Coastguard Worker 
71*27162e4eSAndroid Build Coastguard Worker   for (i = cmpSize; i < cmpSize + 10; ++i) {
72*27162e4eSAndroid Build Coastguard Worker     int result = LZ4_decompress_safe_partial_usingDict(cmpBuffer, outBuffer, i, srcLen, BUFFER_SIZE, buffer, largeSize);
73*27162e4eSAndroid Build Coastguard Worker     if ( (result < 0)
74*27162e4eSAndroid Build Coastguard Worker       || (result != srcLen)
75*27162e4eSAndroid Build Coastguard Worker       || memcmp(source, outBuffer, (size_t)srcLen) ) {
76*27162e4eSAndroid Build Coastguard Worker       printf("test decompress-partial-usingDict with large prefix error \n");
77*27162e4eSAndroid Build Coastguard Worker       return -1;
78*27162e4eSAndroid Build Coastguard Worker     }
79*27162e4eSAndroid Build Coastguard Worker   }
80*27162e4eSAndroid Build Coastguard Worker 
81*27162e4eSAndroid Build Coastguard Worker   for (i = cmpSize; i < cmpSize + 10; ++i) {
82*27162e4eSAndroid Build Coastguard Worker     int result = LZ4_decompress_safe_partial_usingDict(cmpBuffer, outBuffer, i, srcLen, BUFFER_SIZE, smallDict, smallSize);
83*27162e4eSAndroid Build Coastguard Worker     if ( (result < 0)
84*27162e4eSAndroid Build Coastguard Worker       || (result != srcLen)
85*27162e4eSAndroid Build Coastguard Worker       || memcmp(source, outBuffer, (size_t)srcLen) ) {
86*27162e4eSAndroid Build Coastguard Worker       printf("test decompress-partial-usingDict with small external dict error \n");
87*27162e4eSAndroid Build Coastguard Worker       return -1;
88*27162e4eSAndroid Build Coastguard Worker     }
89*27162e4eSAndroid Build Coastguard Worker   }
90*27162e4eSAndroid Build Coastguard Worker 
91*27162e4eSAndroid Build Coastguard Worker   for (i = cmpSize; i < cmpSize + 10; ++i) {
92*27162e4eSAndroid Build Coastguard Worker     int result = LZ4_decompress_safe_partial_usingDict(cmpBuffer, outBuffer, i, srcLen, BUFFER_SIZE, largeDict, largeSize);
93*27162e4eSAndroid Build Coastguard Worker     if ( (result < 0)
94*27162e4eSAndroid Build Coastguard Worker       || (result != srcLen)
95*27162e4eSAndroid Build Coastguard Worker       || memcmp(source, outBuffer, (size_t)srcLen) ) {
96*27162e4eSAndroid Build Coastguard Worker       printf("test decompress-partial-usingDict with large external dict error \n");
97*27162e4eSAndroid Build Coastguard Worker       return -1;
98*27162e4eSAndroid Build Coastguard Worker     }
99*27162e4eSAndroid Build Coastguard Worker   }
100*27162e4eSAndroid Build Coastguard Worker 
101*27162e4eSAndroid Build Coastguard Worker   printf("test decompress-partial-usingDict OK \n");
102*27162e4eSAndroid Build Coastguard Worker   return 0;
103*27162e4eSAndroid Build Coastguard Worker }
104