Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / native_client / tests / toolchain / float2.c
1 /*
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.
5  */
6
7 /*
8  * More basic tests for floating point operations
9  */
10
11 #include <stdio.h>
12 #include "native_client/tests/toolchain/utils.h"
13
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;
22
23 volatile T_int32 i32[] = {5, -5,};
24 volatile T_int64 i64[] = {5, -5, 1LL << 33, -1 * (1LL << 33)};
25
26 volatile T_uint32 u32[] = {5, 1<<31};
27 volatile T_uint64 u64[] = {5, 1LL<<63};
28
29 volatile float f32[] = { 5.6, 5.5, 5.4,
30                          -5.6, -5.5, -5.4,
31 /* TODO(robertm): make this work across all compilers */
32 /*                          1e50, 1e10 */
33 /* http://code.google.com/p/nativeclient/issues/detail?id=2040 */
34 };
35
36 volatile double f64[] = { 5.6, 5.5, 5.4,
37                           -5.6, -5.5, -5.4,
38 /* TODO(robertm): make this work across all compilers */
39 /*                         1e50, 1e10 */
40 };
41
42
43 int main(int argc, char* argv[]) {
44   int i;
45
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]);
50     printf("\n");
51   }
52
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]);
57     printf("\n");
58   }
59
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]);
64     printf("\n");
65   }
66
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]);
71     printf("\n");
72   }
73
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]);
78     if (f32[i] >= 0.0) {
79       printf("uint32_t %u\n", (T_uint32)f32[i]);
80       printf("uint64_t %llu\n", (T_uint64)f32[i]);
81     }
82     printf("\n");
83   }
84
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]);
89     if (f64[i] >= 0.0) {
90       printf("uint32_t %u\n", (T_uint32)f64[i]);
91       printf("uint64_t %llu\n", (T_uint64)f64[i]);
92     }
93     printf("\n");
94   }
95
96   return 0;
97 }