OpenCoverage

shuf.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/src/shuf.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* Shuffle lines of text.-
2-
3 Copyright (C) 2006-2018 Free Software Foundation, Inc.-
4-
5 This program is free software: you can redistribute it and/or modify-
6 it under the terms of the GNU General Public License as published by-
7 the Free Software Foundation, either version 3 of the License, or-
8 (at your option) any later version.-
9-
10 This program is distributed in the hope that it will be useful,-
11 but WITHOUT ANY WARRANTY; without even the implied warranty of-
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
13 GNU General Public License for more details.-
14-
15 You should have received a copy of the GNU General Public License-
16 along with this program. If not, see <https://www.gnu.org/licenses/>.-
17-
18 Written by Paul Eggert. */-
19-
20#include <config.h>-
21-
22#include <sys/types.h>-
23#include "system.h"-
24-
25#include "die.h"-
26#include "error.h"-
27#include "fadvise.h"-
28#include "getopt.h"-
29#include "linebuffer.h"-
30#include "quote.h"-
31#include "randint.h"-
32#include "randperm.h"-
33#include "read-file.h"-
34#include "stdio--.h"-
35#include "xdectoint.h"-
36#include "xstrtol.h"-
37-
38/* The official name of this program (e.g., no 'g' prefix). */-
39#define PROGRAM_NAME "shuf"-
40-
41#define AUTHORS proper_name ("Paul Eggert")-
42-
43/* For reservoir-sampling, allocate the reservoir lines in batches. */-
44enum { RESERVOIR_LINES_INCREMENT = 1024 };-
45-
46/* reservoir-sampling introduces CPU overhead for small inputs.-
47 So only enable it for inputs >= this limit.-
48 This limit was determined using these commands:-
49 $ for p in $(seq 7); do src/seq $((10**$p)) > 10p$p.in; done-
50 $ for p in $(seq 7); do time shuf-nores -n10 10p$p.in >/dev/null; done-
51 $ for p in $(seq 7); do time shuf -n10 10p$p.in >/dev/null; done .*/-
52enum { RESERVOIR_MIN_INPUT = 8192 * 1024 };-
53-
54-
55void-
56usage (int status)-
57{-
58 if (status != EXIT_SUCCESS)
status != 0Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 12 times by 1 test
Evaluated by:
  • shuf
5-12
59 emit_try_help ();
executed 5 times by 1 test: end of block
Executed by:
  • shuf
5
60 else-
61 {-
62 printf (_("\-
63Usage: %s [OPTION]... [FILE]\n\-
64 or: %s -e [OPTION]... [ARG]...\n\-
65 or: %s -i LO-HI [OPTION]...\n\-
66"),-
67 program_name, program_name, program_name);-
68 fputs (_("\-
69Write a random permutation of the input lines to standard output.\n\-
70"), stdout);-
71-
72 emit_stdin_note ();-
73 emit_mandatory_arg_note ();-
74-
75 fputs (_("\-
76 -e, --echo treat each ARG as an input line\n\-
77 -i, --input-range=LO-HI treat each number LO through HI as an input line\n\-
78 -n, --head-count=COUNT output at most COUNT lines\n\-
79 -o, --output=FILE write result to FILE instead of standard output\n\-
80 --random-source=FILE get random bytes from FILE\n\-
81 -r, --repeat output lines can be repeated\n\-
82"), stdout);-
83 fputs (_("\-
84 -z, --zero-terminated line delimiter is NUL, not newline\n\-
85"), stdout);-
86 fputs (HELP_OPTION_DESCRIPTION, stdout);-
87 fputs (VERSION_OPTION_DESCRIPTION, stdout);-
88 emit_ancillary_info (PROGRAM_NAME);-
89 }
executed 12 times by 1 test: end of block
Executed by:
  • shuf
12
90-
91 exit (status);
executed 17 times by 1 test: exit (status);
Executed by:
  • shuf
17
92}-
93-
94/* For long options that have no equivalent short option, use a-
95 non-character as a pseudo short option, starting with CHAR_MAX + 1. */-
96enum-
97{-
98 RANDOM_SOURCE_OPTION = CHAR_MAX + 1-
99};-
100-
101static struct option const long_opts[] =-
102{-
103 {"echo", no_argument, NULL, 'e'},-
104 {"input-range", required_argument, NULL, 'i'},-
105 {"head-count", required_argument, NULL, 'n'},-
106 {"output", required_argument, NULL, 'o'},-
107 {"random-source", required_argument, NULL, RANDOM_SOURCE_OPTION},-
108 {"repeat", no_argument, NULL, 'r'},-
109 {"zero-terminated", no_argument, NULL, 'z'},-
110 {GETOPT_HELP_OPTION_DECL},-
111 {GETOPT_VERSION_OPTION_DECL},-
112 {0, 0, 0, 0},-
113};-
114-
115static void-
116input_from_argv (char **operand, int n_operands, char eolbyte)-
117{-
118 char *p;-
119 size_t size = n_operands;-
120 int i;-
121-
122 for (i = 0; i < n_operands; i++)
i < n_operandsDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 2 times by 1 test
Evaluated by:
  • shuf
2-5
123 size += strlen (operand[i]);
executed 5 times by 1 test: size += strlen (operand[i]);
Executed by:
  • shuf
5
124 p = xmalloc (size);-
125-
126 for (i = 0; i < n_operands; i++)
i < n_operandsDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 2 times by 1 test
Evaluated by:
  • shuf
2-5
127 {-
128 char *p1 = stpcpy (p, operand[i]);-
129 operand[i] = p;-
130 p = p1;-
131 *p++ = eolbyte;-
132 }
executed 5 times by 1 test: end of block
Executed by:
  • shuf
5
133-
134 operand[n_operands] = p;-
135}
executed 2 times by 1 test: end of block
Executed by:
  • shuf
2
136-
137/* Return the start of the next line after LINE. The current line-
138 ends in EOLBYTE, and is guaranteed to end before LINE + N. */-
139-
140static char *-
141next_line (char *line, char eolbyte, size_t n)-
142{-
143 char *p = memchr (line, eolbyte, n);-
144 return p + 1;
executed 4016 times by 1 test: return p + 1;
Executed by:
  • shuf
4016
145}-
146-
147/* Return the size of the input if possible or OFF_T_MAX if not. */-
148-
149static off_t-
150input_size (void)-
151{-
152 off_t file_size;-
153-
154 struct stat stat_buf;-
155 if (fstat (STDIN_FILENO, &stat_buf) != 0)
fstat ( 0 , &stat_buf) != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
156 return OFF_T_MAX;
never executed: return ((off_t) (! (! ((off_t) 0 < (off_t) -1)) ? (off_t) -1 : ((((off_t) 1 << ((sizeof (off_t) * 8) - 2)) - 1) * 2 + 1)));
0
157 if (usable_st_size (&stat_buf))
usable_st_size (&stat_buf)Description
TRUEnever evaluated
FALSEnever evaluated
0
158 file_size = stat_buf.st_size;
never executed: file_size = stat_buf.st_size;
0
159 else-
160 return OFF_T_MAX;
never executed: return ((off_t) (! (! ((off_t) 0 < (off_t) -1)) ? (off_t) -1 : ((((off_t) 1 << ((sizeof (off_t) * 8) - 2)) - 1) * 2 + 1)));
0
161-
162 off_t input_offset = lseek (STDIN_FILENO, 0, SEEK_CUR);-
163 if (input_offset < 0)
input_offset < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
164 return OFF_T_MAX;
never executed: return ((off_t) (! (! ((off_t) 0 < (off_t) -1)) ? (off_t) -1 : ((((off_t) 1 << ((sizeof (off_t) * 8) - 2)) - 1) * 2 + 1)));
0
165-
166 file_size -= input_offset;-
167-
168 return file_size;
never executed: return file_size;
0
169}-
170-
171/* Read all lines and store up to K permuted lines in *OUT_RSRV.-
172 Return the number of lines read, up to a maximum of K. */-
173-
174static size_t-
175read_input_reservoir_sampling (FILE *in, char eolbyte, size_t k,-
176 struct randint_source *s,-
177 struct linebuffer **out_rsrv)-
178{-
179 randint n_lines = 0;-
180 size_t n_alloc_lines = MIN (k, RESERVOIR_LINES_INCREMENT);
(( k )<( RESER...S_INCREMENT ))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
0-1
181 struct linebuffer *line = NULL;-
182 struct linebuffer *rsrv;-
183-
184 rsrv = xcalloc (n_alloc_lines, sizeof (struct linebuffer));-
185-
186 /* Fill the first K lines, directly into the reservoir. */-
187 while (n_lines < k
n_lines < kDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • shuf
0-1
188 && (line =
(line = readli...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
189 readlinebuffer_delim (&rsrv[n_lines], in, eolbyte)) != NULL)
(line = readli...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
190 {-
191 n_lines++;-
192-
193 /* Enlarge reservoir. */-
194 if (n_lines >= n_alloc_lines)
n_lines >= n_alloc_linesDescription
TRUEnever evaluated
FALSEnever evaluated
0
195 {-
196 n_alloc_lines += RESERVOIR_LINES_INCREMENT;-
197 rsrv = xnrealloc (rsrv, n_alloc_lines, sizeof (struct linebuffer));-
198 memset (&rsrv[n_lines], 0,-
199 RESERVOIR_LINES_INCREMENT * sizeof (struct linebuffer));-
200 }
never executed: end of block
0
201 }
never executed: end of block
0
202-
203 /* last line wasn't NULL - so there may be more lines to read. */-
204 if (line != NULL)
line != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • shuf
0-1
205 {-
206 struct linebuffer dummy;-
207 initbuffer (&dummy); /* space for lines not put in reservoir. */-
208-
209 /* Choose the fate of the next line, with decreasing probability (as-
210 n_lines increases in size).-
211-
212 If the line will be used, store it directly in the reservoir.-
213 Otherwise, store it in dummy space.-
214-
215 With 'struct linebuffer', storing into existing buffer will reduce-
216 re-allocations (will only re-allocate if the new line is longer than-
217 the currently allocated space). */-
218 do-
219 {-
220 randint j = randint_choose (s, n_lines + 1); /* 0 .. n_lines. */-
221 line = (j < k) ? (&rsrv[j]) : (&dummy);
(j < k)Description
TRUEnever evaluated
FALSEnever evaluated
0
222 }
never executed: end of block
0
223 while (readlinebuffer_delim (line, in, eolbyte) != NULL && n_lines++);
readlinebuffer...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
n_lines++Description
TRUEnever evaluated
FALSEnever evaluated
0
224-
225 if (! n_lines)
! n_linesDescription
TRUEnever evaluated
FALSEnever evaluated
0
226 die (EXIT_FAILURE, EOVERFLOW, _("too many input lines"));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 75, dcgettext (((void *)0), \"too many input lines\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 75 , dcgettext (((void *)0), "too many input lines" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 75 , dcgettext (((void *)0), "too many input lines" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
227-
228 freebuffer (&dummy);-
229 }
never executed: end of block
0
230-
231 /* no more input lines, or an input error. */-
232 if (ferror (in))
ferror_unlocked (in)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • shuf
0-1
233 die (EXIT_FAILURE, errno, _("read error"));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"read error\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "read error" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "read error" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
234-
235 *out_rsrv = rsrv;-
236 return MIN (k, n_lines);
executed 1 time by 1 test: return ((( k )<( n_lines ))?( k ):( n_lines )) ;
Executed by:
  • shuf
1
237}-
238-
239static int-
240write_permuted_output_reservoir (size_t n_lines, struct linebuffer *lines,-
241 size_t const *permutation)-
242{-
243 for (size_t i = 0; i < n_lines; i++)
i < n_linesDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • shuf
0-1
244 {-
245 const struct linebuffer *p = &lines[permutation[i]];-
246 if (fwrite (p->buffer, sizeof (char), p->length, stdout) != p->length)
never executed: break;
(__extension__...) != p->lengthDescription
TRUEnever evaluated
FALSEnever evaluated
(__builtin_exp...r++))) == (-1)Description
TRUEnever evaluated
FALSEnever evaluated
__cnt > 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_expe...write_end), 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...izeof (char) )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons... ( p->length )Description
TRUEnever evaluated
FALSEnever evaluated
(size_t) ( siz...>length ) <= 8Description
TRUEnever evaluated
FALSEnever evaluated
(size_t) ( siz... (char) ) != 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...izeof (char) )Description
TRUEnever evaluated
FALSEnever evaluated
(size_t) ( siz... (char) ) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons... ( p->length )Description
TRUEnever evaluated
FALSEnever evaluated
(size_t) ( p->length ) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
247 return -1;
never executed: return -1;
0
248 }
never executed: end of block
0
249-
250 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • shuf
1
251}-
252-
253/* Read data from file IN. Input lines are delimited by EOLBYTE;-
254 silently append a trailing EOLBYTE if the file ends in some other-
255 byte. Store a pointer to the resulting array of lines into *PLINE.-
256 Return the number of lines read. Report an error and exit on-
257 failure. */-
258-
259static size_t-
260read_input (FILE *in, char eolbyte, char ***pline)-
261{-
262 char *p;-
263 char *buf = NULL;-
264 size_t used;-
265 char *lim;-
266 char **line;-
267 size_t n_lines;-
268-
269 /* TODO: We should limit the amount of data read here,-
270 to less than RESERVOIR_MIN_INPUT. I.e., adjust fread_file() to support-
271 taking a byte limit. We'd then need to ensure we handle a line spanning-
272 this boundary. With that in place we could set use_reservoir_sampling-
273 when used==RESERVOIR_MIN_INPUT, and have read_input_reservoir_sampling()-
274 call a wrapper function to populate a linebuffer from the internal pline-
275 or if none left, stdin. Doing that would give better performance by-
276 avoiding the reservoir CPU overhead when reading < RESERVOIR_MIN_INPUT-
277 from a pipe, and allow us to dispense with the input_size() function. */-
278 if (!(buf = fread_file (in, &used)))
!(buf = fread_...e (in, &used))Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • shuf
0-10
279 die (EXIT_FAILURE, errno, _("read error"));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"read error\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "read error" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "read error" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
280-
281 if (used && buf[used - 1] != eolbyte)
usedDescription
TRUEevaluated 9 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 1 time by 1 test
Evaluated by:
  • shuf
buf[used - 1] != eolbyteDescription
TRUEnever evaluated
FALSEevaluated 9 times by 1 test
Evaluated by:
  • shuf
0-9
282 buf[used++] = eolbyte;
never executed: buf[used++] = eolbyte;
0
283-
284 lim = buf + used;-
285-
286 n_lines = 0;-
287 for (p = buf; p < lim; p = next_line (p, eolbyte, lim - p))
p < limDescription
TRUEevaluated 2008 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 10 times by 1 test
Evaluated by:
  • shuf
10-2008
288 n_lines++;
executed 2008 times by 1 test: n_lines++;
Executed by:
  • shuf
2008
289-
290 *pline = line = xnmalloc (n_lines + 1, sizeof *line);-
291-
292 line[0] = p = buf;-
293 for (size_t i = 1; i <= n_lines; i++)
i <= n_linesDescription
TRUEevaluated 2008 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 10 times by 1 test
Evaluated by:
  • shuf
10-2008
294 line[i] = p = next_line (p, eolbyte, lim - p);
executed 2008 times by 1 test: line[i] = p = next_line (p, eolbyte, lim - p);
Executed by:
  • shuf
2008
295-
296 return n_lines;
executed 10 times by 1 test: return n_lines;
Executed by:
  • shuf
10
297}-
298-
299/* Output N_LINES lines to stdout from LINE array,-
300 chosen by the indices in PERMUTATION.-
301 PERMUTATION and LINE must have at least N_LINES elements.-
302 Strings in LINE must include the line-terminator character. */-
303static int-
304write_permuted_lines (size_t n_lines, char *const *line,-
305 size_t const *permutation)-
306{-
307 for (size_t i = 0; i < n_lines; i++)
i < n_linesDescription
TRUEevaluated 2003 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 9 times by 1 test
Evaluated by:
  • shuf
9-2003
308 {-
309 char *const *p = line + permutation[i];-
310 size_t len = p[1] - p[0];-
311 if (fwrite (p[0], sizeof *p[0], len, stdout) != len)
never executed: break;
(__extension__...out)))) != lenDescription
TRUEnever evaluated
FALSEevaluated 2003 times by 1 test
Evaluated by:
  • shuf
(__builtin_exp...r++))) == (-1)Description
TRUEnever evaluated
FALSEnever evaluated
__cnt > 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_expe...write_end), 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...sizeof *p[0] )Description
TRUEevaluated 2003 times by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
__builtin_constant_p ( len )Description
TRUEnever evaluated
FALSEevaluated 2003 times by 1 test
Evaluated by:
  • shuf
(size_t) ( siz...) ( len ) <= 8Description
TRUEnever evaluated
FALSEnever evaluated
(size_t) ( sizeof *p[0] ) != 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...sizeof *p[0] )Description
TRUEevaluated 2003 times by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
(size_t) ( sizeof *p[0] ) == 0Description
TRUEnever evaluated
FALSEevaluated 2003 times by 1 test
Evaluated by:
  • shuf
__builtin_constant_p ( len )Description
TRUEnever evaluated
FALSEevaluated 2003 times by 1 test
Evaluated by:
  • shuf
(size_t) ( len ) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-2003
312 return -1;
never executed: return -1;
0
313 }
executed 2003 times by 1 test: end of block
Executed by:
  • shuf
2003
314-
315 return 0;
executed 9 times by 1 test: return 0;
Executed by:
  • shuf
9
316}-
317-
318/* Output N_LINES of numbers to stdout, from PERMUTATION array.-
319 PERMUTATION must have at least N_LINES elements. */-
320static int-
321write_permuted_numbers (size_t n_lines, size_t lo_input,-
322 size_t const *permutation, char eolbyte)-
323{-
324 for (size_t i = 0; i < n_lines; i++)
i < n_linesDescription
TRUEevaluated 106 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 4 times by 1 test
Evaluated by:
  • shuf
4-106
325 {-
326 unsigned long int n = lo_input + permutation[i];-
327 if (printf ("%lu%c", n, eolbyte) < 0)
printf ("%lu%c..., eolbyte) < 0Description
TRUEnever evaluated
FALSEevaluated 106 times by 1 test
Evaluated by:
  • shuf
0-106
328 return -1;
never executed: return -1;
0
329 }
executed 106 times by 1 test: end of block
Executed by:
  • shuf
106
330-
331 return 0;
executed 4 times by 1 test: return 0;
Executed by:
  • shuf
4
332}-
333-
334/* Output COUNT numbers to stdout, chosen randomly from range-
335 LO_INPUT through HI_INPUT. */-
336static int-
337write_random_numbers (struct randint_source *s, size_t count,-
338 size_t lo_input, size_t hi_input, char eolbyte)-
339{-
340 const randint range = hi_input - lo_input + 1;-
341-
342 for (size_t i = 0; i < count; i++)
i < countDescription
TRUEevaluated 3000 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 2 times by 1 test
Evaluated by:
  • shuf
2-3000
343 {-
344 unsigned long int j = lo_input + randint_choose (s, range);-
345 if (printf ("%lu%c", j, eolbyte) < 0)
printf ("%lu%c..., eolbyte) < 0Description
TRUEnever evaluated
FALSEevaluated 3000 times by 1 test
Evaluated by:
  • shuf
0-3000
346 return -1;
never executed: return -1;
0
347 }
executed 3000 times by 1 test: end of block
Executed by:
  • shuf
3000
348-
349 return 0;
executed 2 times by 1 test: return 0;
Executed by:
  • shuf
2
350}-
351-
352/* Output COUNT lines to stdout from LINES array.-
353 LINES must have at least N_LINES elements in it.-
354 Strings in LINES_ must include the line-terminator character. */-
355static int-
356write_random_lines (struct randint_source *s, size_t count,-
357 char *const *lines, size_t n_lines)-
358{-
359 for (size_t i = 0; i < count; i++)
i < countDescription
TRUEevaluated 2000 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 1 time by 1 test
Evaluated by:
  • shuf
1-2000
360 {-
361 const randint j = randint_choose (s, n_lines);-
362 char *const *p = lines + j;-
363 size_t len = p[1] - p[0];-
364 if (fwrite (p[0], sizeof *p[0], len, stdout) != len)
never executed: break;
(__extension__...out)))) != lenDescription
TRUEnever evaluated
FALSEevaluated 2000 times by 1 test
Evaluated by:
  • shuf
(__builtin_exp...r++))) == (-1)Description
TRUEnever evaluated
FALSEnever evaluated
__cnt > 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_expe...write_end), 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...sizeof *p[0] )Description
TRUEevaluated 2000 times by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
__builtin_constant_p ( len )Description
TRUEnever evaluated
FALSEevaluated 2000 times by 1 test
Evaluated by:
  • shuf
(size_t) ( siz...) ( len ) <= 8Description
TRUEnever evaluated
FALSEnever evaluated
(size_t) ( sizeof *p[0] ) != 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...sizeof *p[0] )Description
TRUEevaluated 2000 times by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
(size_t) ( sizeof *p[0] ) == 0Description
TRUEnever evaluated
FALSEevaluated 2000 times by 1 test
Evaluated by:
  • shuf
__builtin_constant_p ( len )Description
TRUEnever evaluated
FALSEevaluated 2000 times by 1 test
Evaluated by:
  • shuf
(size_t) ( len ) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-2000
365 return -1;
never executed: return -1;
0
366 }
executed 2000 times by 1 test: end of block
Executed by:
  • shuf
2000
367-
368 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • shuf
1
369}-
370-
371int-
372main (int argc, char **argv)-
373{-
374 bool echo = false;-
375 bool input_range = false;-
376 size_t lo_input = SIZE_MAX;-
377 size_t hi_input = 0;-
378 size_t head_lines = SIZE_MAX;-
379 char const *outfile = NULL;-
380 char *random_source = NULL;-
381 char eolbyte = '\n';-
382 char **input_lines = NULL;-
383 bool use_reservoir_sampling = false;-
384 bool repeat = false;-
385-
386 int optc;-
387 int n_operands;-
388 char **operand;-
389 size_t n_lines;-
390 char **line = NULL;-
391 struct linebuffer *reservoir = NULL;-
392 struct randint_source *randint_source;-
393 size_t *permutation = NULL;-
394 int i;-
395-
396 initialize_main (&argc, &argv);-
397 set_program_name (argv[0]);-
398 setlocale (LC_ALL, "");-
399 bindtextdomain (PACKAGE, LOCALEDIR);-
400 textdomain (PACKAGE);-
401-
402 atexit (close_stdout);-
403-
404 while ((optc = getopt_long (argc, argv, "ei:n:o:rz", long_opts, NULL)) != -1)
(optc = getopt... *)0) )) != -1Description
TRUEevaluated 77 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 23 times by 1 test
Evaluated by:
  • shuf
23-77
405 switch (optc)-
406 {-
407 case 'e':
executed 5 times by 1 test: case 'e':
Executed by:
  • shuf
5
408 echo = true;-
409 break;
executed 5 times by 1 test: break;
Executed by:
  • shuf
5
410-
411 case 'i':
executed 19 times by 1 test: case 'i':
Executed by:
  • shuf
19
412 {-
413 char *p = strchr (optarg, '-');
__builtin_constant_p ( '-' )Description
TRUEevaluated 19 times by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
!__builtin_con...t_p ( optarg )Description
TRUEevaluated 19 times by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
( '-' ) == '\0'Description
TRUEnever evaluated
FALSEevaluated 19 times by 1 test
Evaluated by:
  • shuf
0-19
414 char const *hi_optarg = optarg;-
415 bool invalid = !p;-
416-
417 if (input_range)
input_rangeDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 18 times by 1 test
Evaluated by:
  • shuf
1-18
418 die (EXIT_FAILURE, 0, _("multiple -i options specified"));
executed 1 time by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"multiple -i options specified\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "multiple -i options specified" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "multiple -i options specified" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
Executed by:
  • shuf
1
419 input_range = true;-
420-
421 if (p)
pDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 2 times by 1 test
Evaluated by:
  • shuf
2-16
422 {-
423 *p = '\0';-
424 lo_input = xdectoumax (optarg, 0, SIZE_MAX, "",-
425 _("invalid input range"), 0);-
426 *p = '-';-
427 hi_optarg = p + 1;-
428 }
executed 14 times by 1 test: end of block
Executed by:
  • shuf
14
429-
430 hi_input = xdectoumax (hi_optarg, 0, SIZE_MAX, "",-
431 _("invalid input range"), 0);-
432-
433 n_lines = hi_input - lo_input + 1;-
434 invalid |= ((lo_input <= hi_input) == (n_lines == 0));-
435 if (invalid)
invalidDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 12 times by 1 test
Evaluated by:
  • shuf
1-12
436 die (EXIT_FAILURE, errno, "%s: %s", _("invalid input range"),
executed 1 time by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), \"%s: %s\", dcgettext (((void *)0), \"invalid input range\", 5), quote (optarg)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_lo...nput range" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , "%s: %s", dcgettext (((void *)0), "invalid input range" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
Executed by:
  • shuf
1
437 quote (optarg));
executed 1 time by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), \"%s: %s\", dcgettext (((void *)0), \"invalid input range\", 5), quote (optarg)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_lo...nput range" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , "%s: %s", dcgettext (((void *)0), "invalid input range" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
Executed by:
  • shuf
1
438 }-
439 break;
executed 12 times by 1 test: break;
Executed by:
  • shuf
12
440-
441 case 'n':
executed 15 times by 1 test: case 'n':
Executed by:
  • shuf
15
442 {-
443 unsigned long int argval;-
444 strtol_error e = xstrtoul (optarg, NULL, 10, &argval, NULL);-
445-
446 if (e == LONGINT_OK)
e == LONGINT_OKDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 3 times by 1 test
Evaluated by:
  • shuf
3-12
447 head_lines = MIN (head_lines, argval);
executed 12 times by 1 test: head_lines = ((( head_lines )<( argval ))?( head_lines ):( argval )) ;
Executed by:
  • shuf
(( head_lines )<( argval ))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 11 times by 1 test
Evaluated by:
  • shuf
1-12
448 else if (e != LONGINT_OVERFLOW)
e != LONGINT_OVERFLOWDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
0-3
449 die (EXIT_FAILURE, 0, _("invalid line count: %s"),
executed 3 times by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"invalid line count: %s\", 5), quote (optarg)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "invalid line count: %s" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "invalid line count: %s" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
Executed by:
  • shuf
3
450 quote (optarg));
executed 3 times by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"invalid line count: %s\", 5), quote (optarg)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "invalid line count: %s" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "invalid line count: %s" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
Executed by:
  • shuf
3
451 }-
452 break;
executed 12 times by 1 test: break;
Executed by:
  • shuf
12
453-
454 case 'o':
executed 4 times by 1 test: case 'o':
Executed by:
  • shuf
4
455 if (outfile && !STREQ (outfile, optarg))
never executed: __result = (((const unsigned char *) (const char *) ( outfile ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( optarg ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
outfileDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 3 times by 1 test
Evaluated by:
  • shuf
!( __extension...)))); }) == 0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-3
456 die (EXIT_FAILURE, 0, _("multiple output files specified"));
executed 1 time by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"multiple output files specified\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "multiple output files specified" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "multiple output files specified" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
Executed by:
  • shuf
1
457 outfile = optarg;-
458 break;
executed 3 times by 1 test: break;
Executed by:
  • shuf
3
459-
460 case RANDOM_SOURCE_OPTION:
executed 3 times by 1 test: case RANDOM_SOURCE_OPTION:
Executed by:
  • shuf
3
461 if (random_source && !STREQ (random_source, optarg))
never executed: __result = (((const unsigned char *) (const char *) ( random_source ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( optarg ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
random_sourceDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 2 times by 1 test
Evaluated by:
  • shuf
!( __extension...)))); }) == 0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-2
462 die (EXIT_FAILURE, 0, _("multiple random sources specified"));
executed 1 time by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"multiple random sources specified\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "multiple random sources specified" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "multiple random sources specified" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
Executed by:
  • shuf
1
463 random_source = optarg;-
464 break;
executed 2 times by 1 test: break;
Executed by:
  • shuf
2
465-
466 case 'r':
executed 8 times by 1 test: case 'r':
Executed by:
  • shuf
8
467 repeat = true;-
468 break;
executed 8 times by 1 test: break;
Executed by:
  • shuf
8
469-
470 case 'z':
executed 3 times by 1 test: case 'z':
Executed by:
  • shuf
3
471 eolbyte = '\0';-
472 break;
executed 3 times by 1 test: break;
Executed by:
  • shuf
3
473-
474 case_GETOPT_HELP_CHAR;
never executed: break;
executed 12 times by 1 test: case GETOPT_HELP_CHAR:
Executed by:
  • shuf
0-12
475 case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
executed 5 times by 1 test: exit ( 0 );
Executed by:
  • shuf
never executed: break;
executed 5 times by 1 test: case GETOPT_VERSION_CHAR:
Executed by:
  • shuf
0-5
476 default:
executed 3 times by 1 test: default:
Executed by:
  • shuf
3
477 usage (EXIT_FAILURE);-
478 }
never executed: end of block
0
479-
480 n_operands = argc - optind;-
481 operand = argv + optind;-
482-
483 /* Check invalid usage. */-
484 if (echo && input_range)
echoDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 20 times by 1 test
Evaluated by:
  • shuf
input_rangeDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 2 times by 1 test
Evaluated by:
  • shuf
1-20
485 {-
486 error (0, 0, _("cannot combine -e and -i options"));-
487 usage (EXIT_FAILURE);-
488 }
never executed: end of block
0
489 if (input_range ? 0 < n_operands : !echo && 1 < n_operands)
input_range ? ...1 < n_operandsDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 21 times by 1 test
Evaluated by:
  • shuf
input_rangeDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 14 times by 1 test
Evaluated by:
  • shuf
!echoDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 2 times by 1 test
Evaluated by:
  • shuf
1 < n_operandsDescription
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • shuf
0-21
490 {-
491 error (0, 0, _("extra operand %s"), quote (operand[!input_range]));-
492 usage (EXIT_FAILURE);-
493 }
never executed: end of block
0
494-
495 /* Prepare input. */-
496 if (echo)
echoDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 19 times by 1 test
Evaluated by:
  • shuf
2-19
497 {-
498 input_from_argv (operand, n_operands, eolbyte);-
499 n_lines = n_operands;-
500 line = operand;-
501 }
executed 2 times by 1 test: end of block
Executed by:
  • shuf
2
502 else if (input_range)
input_rangeDescription
TRUEevaluated 7 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 12 times by 1 test
Evaluated by:
  • shuf
7-12
503 {-
504 n_lines = hi_input - lo_input + 1;-
505 line = NULL;-
506 }
executed 7 times by 1 test: end of block
Executed by:
  • shuf
7
507 else-
508 {-
509 /* If an input file is specified, re-open it as stdin. */-
510 if (n_operands == 1)
n_operands == 1Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 8 times by 1 test
Evaluated by:
  • shuf
4-8
511 if (! (STREQ (operand[0], "-") || ! head_lines
never executed: __result = (((const unsigned char *) (const char *) ( operand[0] ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "-" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
( __extension_...)))); }) == 0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • shuf
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • shuf
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
! head_linesDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 3 times by 1 test
Evaluated by:
  • shuf
0-4
512 || freopen (operand[0], "r", stdin)))
freopen_safer ..., "r", stdin )Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 1 time by 1 test
Evaluated by:
  • shuf
1-2
513 die (EXIT_FAILURE, errno, "%s", quotef (operand[0]));
executed 1 time by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), \"%s\", quotearg_n_style_colon (0, shell_escape_quoting_style, operand[0])), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_locatio...shell_escape_quoting_style, operand[0])), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , "%s", quotearg_n_style_colon (0, shell_escape_quoting_style, operand[0])), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
Executed by:
  • shuf
1
514-
515 fadvise (stdin, FADVISE_SEQUENTIAL);-
516-
517 if (! repeat && head_lines != SIZE_MAX
! repeatDescription
TRUEevaluated 9 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 2 times by 1 test
Evaluated by:
  • shuf
head_lines != ...73709551615UL)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 8 times by 1 test
Evaluated by:
  • shuf
1-9
518 && (! head_lines || input_size () > RESERVOIR_MIN_INPUT))
! head_linesDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEnever evaluated
input_size () ...VOIR_MIN_INPUTDescription
TRUEnever evaluated
FALSEnever evaluated
0-1
519 {-
520 use_reservoir_sampling = true;-
521 n_lines = SIZE_MAX; /* unknown number of input lines, for now. */-
522 }
executed 1 time by 1 test: end of block
Executed by:
  • shuf
1
523 else-
524 {-
525 n_lines = read_input (stdin, eolbyte, &input_lines);-
526 line = input_lines;-
527 }
executed 10 times by 1 test: end of block
Executed by:
  • shuf
10
528 }-
529-
530 if (! repeat)
! repeatDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 6 times by 1 test
Evaluated by:
  • shuf
6-14
531 head_lines = MIN (head_lines, n_lines);
executed 14 times by 1 test: head_lines = ((( head_lines )<( n_lines ))?( head_lines ):( n_lines )) ;
Executed by:
  • shuf
(( head_lines )<( n_lines ))Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 11 times by 1 test
Evaluated by:
  • shuf
3-14
532-
533 randint_source = randint_all_new (random_source,-
534 (use_reservoir_sampling || repeat-
535 ? SIZE_MAX-
536 : randperm_bound (head_lines, n_lines)));-
537 if (! randint_source)
! randint_sourceDescription
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • shuf
0-20
538 die (EXIT_FAILURE, errno, "%s", quotef (random_source));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), \"%s\", quotearg_n_style_colon (0, shell_escape_quoting_style, random_source)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_loca...escape_quoting_style, random_source)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , "%s", quotearg_n_style_colon (0, shell_escape_quoting_style, random_source)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
539-
540 if (use_reservoir_sampling)
use_reservoir_samplingDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 19 times by 1 test
Evaluated by:
  • shuf
1-19
541 {-
542 /* Instead of reading the entire file into 'line',-
543 use reservoir-sampling to store just "head_lines" random lines. */-
544 n_lines = read_input_reservoir_sampling (stdin, eolbyte, head_lines,-
545 randint_source, &reservoir);-
546 head_lines = n_lines;-
547 }
executed 1 time by 1 test: end of block
Executed by:
  • shuf
1
548-
549 /* Close stdin now, rather than earlier, so that randint_all_new-
550 doesn't have to worry about opening something other than-
551 stdin. */-
552 if (! (echo || input_range)
echoDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 18 times by 1 test
Evaluated by:
  • shuf
input_rangeDescription
TRUEevaluated 7 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 11 times by 1 test
Evaluated by:
  • shuf
2-18
553 && (fclose (stdin) != 0))
( rpl_fclose ( stdin ) != 0)Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • shuf
0-11
554 die (EXIT_FAILURE, errno, _("read error"));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"read error\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "read error" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "read error" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
555-
556 if (!repeat)
!repeatDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 6 times by 1 test
Evaluated by:
  • shuf
6-14
557 permutation = randperm_new (randint_source, head_lines, n_lines);
executed 14 times by 1 test: permutation = randperm_new (randint_source, head_lines, n_lines);
Executed by:
  • shuf
14
558-
559 if (outfile && ! freopen (outfile, "w", stdout))
outfileDescription
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • shuf
! freopen_safe... "w", stdout )Description
TRUEnever evaluated
FALSEnever evaluated
0-20
560 die (EXIT_FAILURE, errno, "%s", quotef (outfile));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), \"%s\", quotearg_n_style_colon (0, shell_escape_quoting_style, outfile)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_location (...n (0, shell_escape_quoting_style, outfile)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , "%s", quotearg_n_style_colon (0, shell_escape_quoting_style, outfile)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
561-
562 /* Generate output according to requested method */-
563 if (repeat)
repeatDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 14 times by 1 test
Evaluated by:
  • shuf
6-14
564 {-
565 if (head_lines == 0)
head_lines == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 4 times by 1 test
Evaluated by:
  • shuf
2-4
566 i = 0;
executed 2 times by 1 test: i = 0;
Executed by:
  • shuf
2
567 else-
568 {-
569 if (n_lines == 0)
n_lines == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 3 times by 1 test
Evaluated by:
  • shuf
1-3
570 die (EXIT_FAILURE, 0, _("no lines to repeat"));
executed 1 time by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"no lines to repeat\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "no lines to repeat" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "no lines to repeat" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
Executed by:
  • shuf
1
571 if (input_range)
input_rangeDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 1 time by 1 test
Evaluated by:
  • shuf
1-2
572 i = write_random_numbers (randint_source, head_lines,
executed 2 times by 1 test: i = write_random_numbers (randint_source, head_lines, lo_input, hi_input, eolbyte);
Executed by:
  • shuf
2
573 lo_input, hi_input, eolbyte);
executed 2 times by 1 test: i = write_random_numbers (randint_source, head_lines, lo_input, hi_input, eolbyte);
Executed by:
  • shuf
2
574 else-
575 i = write_random_lines (randint_source, head_lines, line, n_lines);
executed 1 time by 1 test: i = write_random_lines (randint_source, head_lines, line, n_lines);
Executed by:
  • shuf
1
576 }-
577 }-
578 else-
579 {-
580 if (use_reservoir_sampling)
use_reservoir_samplingDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • shuf
FALSEevaluated 13 times by 1 test
Evaluated by:
  • shuf
1-13
581 i = write_permuted_output_reservoir (n_lines, reservoir, permutation);
executed 1 time by 1 test: i = write_permuted_output_reservoir (n_lines, reservoir, permutation);
Executed by:
  • shuf
1
582 else if (input_range)
input_rangeDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • shuf
FALSEevaluated 9 times by 1 test
Evaluated by:
  • shuf
4-9
583 i = write_permuted_numbers (head_lines, lo_input,
executed 4 times by 1 test: i = write_permuted_numbers (head_lines, lo_input, permutation, eolbyte);
Executed by:
  • shuf
4
584 permutation, eolbyte);
executed 4 times by 1 test: i = write_permuted_numbers (head_lines, lo_input, permutation, eolbyte);
Executed by:
  • shuf
4
585 else-
586 i = write_permuted_lines (head_lines, line, permutation);
executed 9 times by 1 test: i = write_permuted_lines (head_lines, line, permutation);
Executed by:
  • shuf
9
587 }-
588-
589 if (i != 0)
i != 0Description
TRUEnever evaluated
FALSEevaluated 19 times by 1 test
Evaluated by:
  • shuf
0-19
590 die (EXIT_FAILURE, errno, _("write error"));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"write error\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "write error" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "write error" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
591-
592#ifdef lint-
593 free (permutation);-
594 randint_all_free (randint_source);-
595 if (input_lines)-
596 {-
597 free (input_lines[0]);-
598 free (input_lines);-
599 }-
600 if (reservoir)-
601 {-
602 size_t j;-
603 for (j = 0; j < n_lines; ++j)-
604 freebuffer (&reservoir[j]);-
605 free (reservoir);-
606 }-
607#endif-
608-
609 return EXIT_SUCCESS;
executed 19 times by 1 test: return 0 ;
Executed by:
  • shuf
19
610}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2