Blame string/test-ffs.c

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