2 * Copyright (c) 2011 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
8 * More basic tests for floating point operations
12 #include "native_client/tests/toolchain/utils.h"
14 /* NOTE: we use our own definitions instead of stdint.h's */
15 /* to ensure compatibility with printf format strings. */
16 /* Getting this right without casting across all our TCs */
17 /* is very hard otherwise. */
18 typedef signed int T_int32;
19 typedef unsigned int T_uint32;
20 typedef signed long long T_int64;
21 typedef unsigned long long T_uint64;
23 volatile T_int32 i32[] = {5, -5,};
24 volatile T_int64 i64[] = {5, -5, 1LL << 33, -1 * (1LL << 33)};
26 volatile T_uint32 u32[] = {5, 1<<31};
27 volatile T_uint64 u64[] = {5, 1LL<<63};
29 volatile float f32[] = { 5.6, 5.5, 5.4,
31 /* TODO(robertm): make this work across all compilers */
33 /* http://code.google.com/p/nativeclient/issues/detail?id=2040 */
36 volatile double f64[] = { 5.6, 5.5, 5.4,
38 /* TODO(robertm): make this work across all compilers */
43 int main(int argc, char* argv[]) {
46 for (i = 0; i < ARRAY_SIZE_UNSAFE(i32); ++i) {
47 printf("i32: %d\n", i32[i]);
48 printf("double %.6f\n", (double)i32[i]);
49 printf("float %.6f\n", (float)i32[i]);
53 for (i = 0; i < ARRAY_SIZE_UNSAFE(i64); ++i) {
54 printf("i64: %lld\n", i64[i]);
55 printf("double %.6f\n", (double)i64[i]);
56 printf("float %.6f\n", (float)i64[i]);
60 for (i = 0; i < ARRAY_SIZE_UNSAFE(u32); ++i) {
61 printf("u32: %u\n", u32[i]);
62 printf("double %.6f\n", (double)u32[i]);
63 printf("float %.6f\n", (float)u32[i]);
67 for (i = 0; i < ARRAY_SIZE_UNSAFE(u64); ++i) {
68 printf("u64: %llu\n", u64[i]);
69 printf("double %.6f\n", (double)u64[i]);
70 printf("float %.6f\n", (float)u64[i]);
74 for (i = 0; i < ARRAY_SIZE_UNSAFE(f32); ++i) {
75 printf("f32: %e\n", f32[i]);
76 printf("int32_t %d\n", (T_int32)f32[i]);
77 printf("int64_t %lld\n", (T_int64)f32[i]);
79 printf("uint32_t %u\n", (T_uint32)f32[i]);
80 printf("uint64_t %llu\n", (T_uint64)f32[i]);
85 for (i = 0; i < ARRAY_SIZE_UNSAFE(f64); ++i) {
86 printf("f64: %e\n", f64[i]);
87 printf("int32_t %d\n", (T_int32)f64[i]);
88 printf("int64_t %lld\n", (T_int64)f64[i]);
90 printf("uint32_t %u\n", (T_uint32)f64[i]);
91 printf("uint64_t %llu\n", (T_uint64)f64[i]);