Blame string/test-ffs.c

Packit Service 82fcde
/* Copyright (C) 1994-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
   Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
Packit Service 82fcde
     On-Line Applications Research Corporation.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public
Packit Service 82fcde
   License as published by the Free Software Foundation; either
Packit Service 82fcde
   version 2.1 of the License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; if not, see
Packit Service 82fcde
   <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#include <stdlib.h>
Packit Service 82fcde
#include <stdio.h>
Packit Service 82fcde
#include <string.h>
Packit Service 82fcde
Packit Service 82fcde
int
Packit Service 82fcde
do_test (void)
Packit Service 82fcde
{
Packit Service 82fcde
  int failures = 0;
Packit Service 82fcde
  int i;
Packit Service 82fcde
Packit Service 82fcde
  auto void try (const char *name, long long int param, int value,
Packit Service 82fcde
		 int expected);
Packit Service 82fcde
Packit Service 82fcde
  void try (const char *name, long long int param, int value, int expected)
Packit Service 82fcde
    {
Packit Service 82fcde
      if (value != expected)
Packit Service 82fcde
	{
Packit Service 82fcde
	  printf ("%s(%#llx) expected %d got %d\n",
Packit Service 82fcde
		  name, param, expected, value);
Packit Service 82fcde
	  ++failures;
Packit Service 82fcde
	}
Packit Service 82fcde
      else
Packit Service 82fcde
	printf ("%s(%#llx) as expected %d\n", name, param, value);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
#define TEST(fct, type) \
Packit Service 82fcde
  try (#fct, 0, fct ((type) 0), 0);					      \
Packit Service 82fcde
  for (i=0 ; i < 8 * sizeof (type); i++)				      \
Packit Service 82fcde
    try (#fct, 1ll << i, fct (((type) 1) << i), i + 1);			      \
Packit Service 82fcde
  for (i=0 ; i < 8 * sizeof (type) ; i++)				      \
Packit Service 82fcde
    try (#fct, (~((type) 0) >> i) << i, fct ((~((type) 0) >> i) << i), i + 1);\
Packit Service 82fcde
  try (#fct, 0x80008000, fct ((type) 0x80008000), 16)
Packit Service 82fcde
Packit Service 82fcde
  TEST (ffs, int);
Packit Service 82fcde
  TEST (ffsl, long int);
Packit Service 82fcde
  TEST (ffsll, long long int);
Packit Service 82fcde
Packit Service 82fcde
  if (failures)
Packit Service 82fcde
    printf ("Test FAILED!  %d failure%s.\n", failures, &"s"[failures == 1]);
Packit Service 82fcde
  else
Packit Service 82fcde
    puts ("Test succeeded.");
Packit Service 82fcde
Packit Service 82fcde
  return failures;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
#include <support/test-driver.c>