xref: /aosp_15_r20/external/lz4/tests/loremOut.c (revision 27162e4e17433d5aa7cb38e7b6a433a09405fc7f)
1*27162e4eSAndroid Build Coastguard Worker /*
2*27162e4eSAndroid Build Coastguard Worker     lorem.c - lorem ipsum generator to stdout
3*27162e4eSAndroid Build Coastguard Worker     Copyright (C) Yann Collet 2024
4*27162e4eSAndroid Build Coastguard Worker 
5*27162e4eSAndroid Build Coastguard Worker     GPL v2 License
6*27162e4eSAndroid Build Coastguard Worker 
7*27162e4eSAndroid Build Coastguard Worker     This program is free software; you can redistribute it and/or modify
8*27162e4eSAndroid Build Coastguard Worker     it under the terms of the GNU General Public License as published by
9*27162e4eSAndroid Build Coastguard Worker     the Free Software Foundation; either version 2 of the License, or
10*27162e4eSAndroid Build Coastguard Worker     (at your option) any later version.
11*27162e4eSAndroid Build Coastguard Worker 
12*27162e4eSAndroid Build Coastguard Worker     This program is distributed in the hope that it will be useful,
13*27162e4eSAndroid Build Coastguard Worker     but WITHOUT ANY WARRANTY; without even the implied warranty of
14*27162e4eSAndroid Build Coastguard Worker     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*27162e4eSAndroid Build Coastguard Worker     GNU General Public License for more details.
16*27162e4eSAndroid Build Coastguard Worker 
17*27162e4eSAndroid Build Coastguard Worker     You should have received a copy of the GNU General Public License along
18*27162e4eSAndroid Build Coastguard Worker     with this program; if not, write to the Free Software Foundation, Inc.,
19*27162e4eSAndroid Build Coastguard Worker     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20*27162e4eSAndroid Build Coastguard Worker 
21*27162e4eSAndroid Build Coastguard Worker     You can contact the author at :
22*27162e4eSAndroid Build Coastguard Worker    - LZ4 source repository : https://github.com/lz4/lz4
23*27162e4eSAndroid Build Coastguard Worker    - Public forum : https://groups.google.com/forum/#!forum/lz4c
24*27162e4eSAndroid Build Coastguard Worker */
25*27162e4eSAndroid Build Coastguard Worker 
26*27162e4eSAndroid Build Coastguard Worker /* Implementation notes:
27*27162e4eSAndroid Build Coastguard Worker  * Generates a stream of Lorem ipsum paragraphs to stdout,
28*27162e4eSAndroid Build Coastguard Worker  * up to the requested size, which can be very large (> 4 GB).
29*27162e4eSAndroid Build Coastguard Worker  * Note that, beyond 1 paragraph, this generator produces
30*27162e4eSAndroid Build Coastguard Worker  * a different content than LOREM_genBuffer (even when using same seed).
31*27162e4eSAndroid Build Coastguard Worker  */
32*27162e4eSAndroid Build Coastguard Worker 
33*27162e4eSAndroid Build Coastguard Worker #include "platform.h"  /* Compiler options, SET_BINARY_MODE */
34*27162e4eSAndroid Build Coastguard Worker #include "loremOut.h"
35*27162e4eSAndroid Build Coastguard Worker #include "lorem.h"     /* LOREM_genBlock */
36*27162e4eSAndroid Build Coastguard Worker #include <stdio.h>
37*27162e4eSAndroid Build Coastguard Worker #include <assert.h>
38*27162e4eSAndroid Build Coastguard Worker 
39*27162e4eSAndroid Build Coastguard Worker 
40*27162e4eSAndroid Build Coastguard Worker #define MIN(a, b) ((a) < (b) ? (a) : (b))
41*27162e4eSAndroid Build Coastguard Worker #define LOREM_BLOCKSIZE (2 << 10)
LOREM_genOut(unsigned long long size,unsigned seed)42*27162e4eSAndroid Build Coastguard Worker void LOREM_genOut(unsigned long long size, unsigned seed)
43*27162e4eSAndroid Build Coastguard Worker {
44*27162e4eSAndroid Build Coastguard Worker   char buff[LOREM_BLOCKSIZE] = {0};
45*27162e4eSAndroid Build Coastguard Worker   unsigned long long total = 0;
46*27162e4eSAndroid Build Coastguard Worker   size_t genBlockSize = (size_t)MIN(size, LOREM_BLOCKSIZE);
47*27162e4eSAndroid Build Coastguard Worker 
48*27162e4eSAndroid Build Coastguard Worker   /* init */
49*27162e4eSAndroid Build Coastguard Worker   SET_BINARY_MODE(stdout);
50*27162e4eSAndroid Build Coastguard Worker 
51*27162e4eSAndroid Build Coastguard Worker   /* Generate Ipsum text, one paragraph at a time */
52*27162e4eSAndroid Build Coastguard Worker   while (total < size) {
53*27162e4eSAndroid Build Coastguard Worker     size_t generated = LOREM_genBlock(buff, genBlockSize, seed++, total == 0, 0);
54*27162e4eSAndroid Build Coastguard Worker     assert(generated <= genBlockSize);
55*27162e4eSAndroid Build Coastguard Worker     total += generated;
56*27162e4eSAndroid Build Coastguard Worker     assert(total <= size);
57*27162e4eSAndroid Build Coastguard Worker     fwrite(buff, 1, generated, stdout); /* note: should check potential write error */
58*27162e4eSAndroid Build Coastguard Worker     if (size - total < genBlockSize)
59*27162e4eSAndroid Build Coastguard Worker       genBlockSize = (size_t)(size - total);
60*27162e4eSAndroid Build Coastguard Worker   }
61*27162e4eSAndroid Build Coastguard Worker   assert(total == size);
62*27162e4eSAndroid Build Coastguard Worker }
63