/* Copyright (C) 2003 Free Software Foundation. by Roger Sayle , derived from mzero3.c Constant folding of sin(-0.0), tan(-0.0) and atan(-0.0) should all return -0.0, for both double and float forms. */ void abort (void); typedef __SIZE_TYPE__ size_t; extern int memcmp (const void *, const void *, size_t); double sin (double); double tan (double); double atan (double); float sinf (float); float tanf (float); float atanf (float); void expectd (double, double); void expectf (float, float); void expectd (double value, double expected) { if (value != expected || memcmp ((void *)&value, (void *) &expected, sizeof (double)) != 0) abort (); } void expectf (float value, float expected) { if (value != expected || memcmp ((void *)&value, (void *) &expected, sizeof (float)) != 0) abort (); } int main () { expectd (sin (0.0), 0.0); expectd (tan (0.0), 0.0); expectd (atan (0.0), 0.0); expectd (sin (-0.0), -0.0); expectd (tan (-0.0), -0.0); expectd (atan (-0.0), -0.0); expectf (sinf (0.0f), 0.0f); expectf (tanf (0.0f), 0.0f); expectf (atanf (0.0f), 0.0f); expectf (sinf (-0.0f), -0.0f); expectf (tanf (-0.0f), -0.0f); expectf (atanf (-0.0f), -0.0f); return 0; }