Changeset e9d0ed4 in mainline
- Timestamp:
- 2012-10-07T09:56:15Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 000494d
- Parents:
- b60faf7
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/tester/float/softfloat1.c
rb60faf7 re9d0ed4 32 32 #include <add.h> 33 33 #include <sub.h> 34 #include <mul.h> 35 #include <div.h> 34 36 #include <bool.h> 35 37 #include "../tester.h" 36 38 37 #define OPERANDS 539 #define OPERANDS 6 38 40 #define PRECISION 10000 39 41 … … 43 45 44 46 static float float_op_a[OPERANDS] = 45 {3.5, -2.1, 100.0, 50.0, -1024.0 };47 {3.5, -2.1, 100.0, 50.0, -1024.0, 0.0}; 46 48 47 49 static float float_op_b[OPERANDS] = 48 {-2.1, 100.0, 50.0, -1024.0, 3.5 };50 {-2.1, 100.0, 50.0, -1024.0, 3.5, 0.0}; 49 51 50 52 static cmptype_t cmpabs(cmptype_t a) … … 96 98 } 97 99 100 static bool test_float_mul(void) 101 { 102 bool correct = true; 103 104 for (unsigned int i = 0; i < OPERANDS; i++) { 105 for (unsigned int j = 0; j < OPERANDS; j++) { 106 float a = float_op_a[i]; 107 float b = float_op_b[j]; 108 float c = a * b; 109 110 float_t sa; 111 float_t sb; 112 float_t sc; 113 114 sa.val = float_op_a[i]; 115 sb.val = float_op_b[j]; 116 sc.data = mul_float(sa.data, sb.data); 117 118 cmptype_t ic = (cmptype_t) (c * PRECISION); 119 cmptype_t isc = (cmptype_t) (sc.val * PRECISION); 120 cmptype_t diff = cmpabs(ic - isc); 121 122 if (diff != 0) { 123 TPRINTF("i=%u, j=%u diff=%" PRIdCMPTYPE "\n", i, j, diff); 124 correct = false; 125 } 126 } 127 } 128 129 return correct; 130 } 131 132 static bool test_float_div(void) 133 { 134 bool correct = true; 135 136 for (unsigned int i = 0; i < OPERANDS; i++) { 137 for (unsigned int j = 0; j < OPERANDS; j++) { 138 float a = float_op_a[i]; 139 float b = float_op_b[j]; 140 141 if (b == 0.0) 142 continue; 143 144 float c = a / b; 145 146 float_t sa; 147 float_t sb; 148 float_t sc; 149 150 sa.val = float_op_a[i]; 151 sb.val = float_op_b[j]; 152 sc.data = div_float(sa.data, sb.data); 153 154 cmptype_t ic = (cmptype_t) (c * PRECISION); 155 cmptype_t isc = (cmptype_t) (sc.val * PRECISION); 156 cmptype_t diff = cmpabs(ic - isc); 157 158 if (diff != 0) { 159 TPRINTF("i=%u, j=%u diff=%" PRIdCMPTYPE "\n", i, j, diff); 160 correct = false; 161 } 162 } 163 } 164 165 return correct; 166 } 167 98 168 const char *test_softfloat1(void) 99 169 { 100 170 if (!test_float_add()) 101 171 return "Float addition failed"; 172 if (!test_float_mul()) 173 return "Float multiplication failed"; 174 if (!test_float_div()) 175 return "Float division failed"; 102 176 103 177 return NULL;
Note:
See TracChangeset
for help on using the changeset viewer.