mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-15 15:15:40 +00:00
58 lines
1.2 KiB
C
58 lines
1.2 KiB
C
/*
|
|
* Copyright 2016 The Emscripten Authors. All rights reserved.
|
|
* Emscripten is available under two separate licenses, the MIT license and the
|
|
* University of Illinois/NCSA Open Source License. Both these licenses can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <math.h>
|
|
|
|
// test copysign of 0
|
|
int __attribute__((noinline))
|
|
copysign_bug (double x)
|
|
{
|
|
if (x != 0.0 && (x * 0.5 == x)) {
|
|
printf("1\n");
|
|
return 1;
|
|
}
|
|
printf("f: %f\n", x);
|
|
if (__builtin_copysign(1.0, x) < 0.0) {
|
|
printf("2\n");
|
|
return 2;
|
|
} else {
|
|
printf("3\n");
|
|
return 3;
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
#define TEST(x, y) printf("%.2f, %.2f ==> %.2f\n", x, y, copysign(x, y));
|
|
TEST(5.0f, 5.0f);
|
|
TEST(5.0f, -5.0f);
|
|
TEST(-5.0f, 5.0f);
|
|
TEST(-5.0f, -5.0f);
|
|
TEST(5.0f, 4.0f);
|
|
TEST(5.0f, -4.0f);
|
|
TEST(-5.0f, 4.0f);
|
|
TEST(-5.0f, -4.0f);
|
|
TEST(0.0f, 5.0f);
|
|
TEST(0.0f, -5.0f);
|
|
TEST(-0.0f, 5.0f);
|
|
TEST(-0.0f, -5.0f);
|
|
TEST(5.0f, 0.0f);
|
|
TEST(5.0f, -0.0f);
|
|
TEST(-5.0f, 0.0f);
|
|
TEST(-5.0f, -0.0f);
|
|
TEST(0.0f, 0.0f);
|
|
TEST(0.0f, -0.0f);
|
|
TEST(-0.0f, 0.0f);
|
|
TEST(-0.0f, -0.0f);
|
|
|
|
double x = -0.0;
|
|
if (copysign_bug (x) != 2)
|
|
__builtin_abort ();
|
|
|
|
return 0;
|
|
}
|