(root)/
coreutils-9.4/
gnulib-tests/
bench-digest.h
       1  /*
       2   * Copyright (C) 2018-2023 Free Software Foundation, Inc.
       3   *
       4   * This program is free software: you can redistribute it and/or modify
       5   * it under the terms of the GNU General Public License as published by
       6   * the Free Software Foundation, either version 3 of the License, or
       7   * (at your option) any later version.
       8   *
       9   * This program is distributed in the hope that it will be useful,
      10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
      11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12   * GNU General Public License for more details.
      13   *
      14   * You should have received a copy of the GNU General Public License
      15   * along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      16  
      17  #include <stdio.h>
      18  #include <stdlib.h>
      19  
      20  #include "bench.h"
      21  
      22  int
      23  main (int argc, char *argv[])
      24  {
      25    if (argc != 3)
      26      {
      27        fprintf (stderr, "Usage: %s SIZE REPETITIONS\n", argv[0]);
      28        exit (1);
      29      }
      30  
      31    size_t size = atol (argv[1]);
      32    int repeat = atoi (argv[2]);
      33  
      34    char *memblock = (char *) malloc (size);
      35    if (!memblock)
      36      {
      37        fprintf (stderr, "%s: memory exhausted\n", argv[0]);
      38        return 1;
      39      }
      40  
      41    /* Fill the memory block.  */
      42    {
      43      size_t i;
      44      for (i = 0; i < size; i++)
      45        memblock[i] =
      46          (unsigned char) (((i * (i-1) * (i-5)) >> 6) + (i % 499) + (i % 101));
      47    }
      48  
      49    struct timings_state ts;
      50    timing_start (&ts);
      51  
      52    int count;
      53    for (count = 0; count < repeat; count++)
      54      {
      55        char digest[64];
      56        FUNC (memblock, size, digest);
      57      }
      58  
      59    timing_end (&ts);
      60    timing_output (&ts);
      61  
      62    return 0;
      63  }