mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-13 22:25: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;
|
||
|
}
|