Index: test/cctest/compiler/test-run-machops.cc |
diff --git a/test/cctest/compiler/test-run-machops.cc b/test/cctest/compiler/test-run-machops.cc |
index d014302db17cbf4e632721de62019bfe54071692..cbea5fec06e6f07b79e8fe623f03fe095e2e77a6 100644 |
--- a/test/cctest/compiler/test-run-machops.cc |
+++ b/test/cctest/compiler/test-run-machops.cc |
@@ -3237,74 +3237,92 @@ TEST(RunLoadStore) { |
} |
-TEST(RunFloat32Binop) { |
- RawMachineAssemblerTester<int32_t> m; |
- float result; |
+TEST(RunFloat32Add) { |
+ BufferedRawMachineAssemblerTester<float> m(kMachFloat32, kMachFloat32); |
+ m.Return(m.Float32Add(m.Parameter(0), m.Parameter(1))); |
- const Operator* ops[] = {m.machine()->Float32Add(), m.machine()->Float32Sub(), |
- m.machine()->Float32Mul(), m.machine()->Float32Div(), |
- NULL}; |
+ FOR_FLOAT32_INPUTS(i) { |
+ FOR_FLOAT32_INPUTS(j) { CheckFloatEq(*i + *j, m.Call(*i, *j)); } |
+ } |
+} |
- float inf = std::numeric_limits<float>::infinity(); |
- const Operator* inputs[] = { |
- m.common()->Float32Constant(0.0f), m.common()->Float32Constant(1.0f), |
- m.common()->Float32Constant(1.0f), m.common()->Float32Constant(0.0f), |
- m.common()->Float32Constant(0.0f), m.common()->Float32Constant(-1.0f), |
- m.common()->Float32Constant(-1.0f), m.common()->Float32Constant(0.0f), |
- m.common()->Float32Constant(0.22f), m.common()->Float32Constant(-1.22f), |
- m.common()->Float32Constant(-1.22f), m.common()->Float32Constant(0.22f), |
- m.common()->Float32Constant(inf), m.common()->Float32Constant(0.22f), |
- m.common()->Float32Constant(inf), m.common()->Float32Constant(-inf), |
- NULL}; |
- for (int i = 0; ops[i] != NULL; i++) { |
- for (int j = 0; inputs[j] != NULL; j += 2) { |
- RawMachineAssemblerTester<int32_t> m; |
- Node* a = m.AddNode(inputs[j]); |
- Node* b = m.AddNode(inputs[j + 1]); |
- Node* binop = m.AddNode(ops[i], a, b); |
- Node* base = m.PointerConstant(&result); |
- Node* zero = m.IntPtrConstant(0); |
- m.Store(kMachFloat32, base, zero, binop, kNoWriteBarrier); |
- m.Return(m.Int32Constant(i + j)); |
- CHECK_EQ(i + j, m.Call()); |
- } |
+TEST(RunFloat32Sub) { |
+ BufferedRawMachineAssemblerTester<float> m(kMachFloat32, kMachFloat32); |
+ m.Return(m.Float32Sub(m.Parameter(0), m.Parameter(1))); |
+ |
+ FOR_FLOAT32_INPUTS(i) { |
+ FOR_FLOAT32_INPUTS(j) { CheckFloatEq(*i - *j, m.Call(*i, *j)); } |
} |
} |
-TEST(RunFloat64Binop) { |
- RawMachineAssemblerTester<int32_t> m; |
- double result; |
+TEST(RunFloat32Mul) { |
+ BufferedRawMachineAssemblerTester<float> m(kMachFloat32, kMachFloat32); |
+ m.Return(m.Float32Mul(m.Parameter(0), m.Parameter(1))); |
- const Operator* ops[] = {m.machine()->Float64Add(), m.machine()->Float64Sub(), |
- m.machine()->Float64Mul(), m.machine()->Float64Div(), |
- m.machine()->Float64Mod(), NULL}; |
+ FOR_FLOAT32_INPUTS(i) { |
+ FOR_FLOAT32_INPUTS(j) { CheckFloatEq(*i * *j, m.Call(*i, *j)); } |
+ } |
+} |
- double inf = V8_INFINITY; |
- const Operator* inputs[] = { |
- m.common()->Float64Constant(0), m.common()->Float64Constant(1), |
- m.common()->Float64Constant(1), m.common()->Float64Constant(0), |
- m.common()->Float64Constant(0), m.common()->Float64Constant(-1), |
- m.common()->Float64Constant(-1), m.common()->Float64Constant(0), |
- m.common()->Float64Constant(0.22), m.common()->Float64Constant(-1.22), |
- m.common()->Float64Constant(-1.22), m.common()->Float64Constant(0.22), |
- m.common()->Float64Constant(inf), m.common()->Float64Constant(0.22), |
- m.common()->Float64Constant(inf), m.common()->Float64Constant(-inf), |
- NULL}; |
- for (int i = 0; ops[i] != NULL; i++) { |
- for (int j = 0; inputs[j] != NULL; j += 2) { |
- RawMachineAssemblerTester<int32_t> m; |
- Node* a = m.AddNode(inputs[j]); |
- Node* b = m.AddNode(inputs[j + 1]); |
- Node* binop = m.AddNode(ops[i], a, b); |
- Node* base = m.PointerConstant(&result); |
- Node* zero = m.Int32Constant(0); |
- m.Store(kMachFloat64, base, zero, binop, kNoWriteBarrier); |
- m.Return(m.Int32Constant(i + j)); |
- CHECK_EQ(i + j, m.Call()); |
- } |
+TEST(RunFloat32Div) { |
+ BufferedRawMachineAssemblerTester<float> m(kMachFloat32, kMachFloat32); |
+ m.Return(m.Float32Div(m.Parameter(0), m.Parameter(1))); |
+ |
+ FOR_FLOAT32_INPUTS(i) { |
+ FOR_FLOAT32_INPUTS(j) { CheckFloatEq(*i / *j, m.Call(*i, *j)); } |
+ } |
+} |
+ |
+ |
+TEST(RunFloat64Add) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64, kMachFloat64); |
+ m.Return(m.Float64Add(m.Parameter(0), m.Parameter(1))); |
+ |
+ FOR_FLOAT64_INPUTS(i) { |
+ FOR_FLOAT64_INPUTS(j) { CheckDoubleEq(*i + *j, m.Call(*i, *j)); } |
+ } |
+} |
+ |
+ |
+TEST(RunFloat64Sub) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64, kMachFloat64); |
+ m.Return(m.Float64Sub(m.Parameter(0), m.Parameter(1))); |
+ |
+ FOR_FLOAT64_INPUTS(i) { |
+ FOR_FLOAT64_INPUTS(j) { CheckDoubleEq(*i - *j, m.Call(*i, *j)); } |
+ } |
+} |
+ |
+ |
+TEST(RunFloat64Mul) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64, kMachFloat64); |
+ m.Return(m.Float64Mul(m.Parameter(0), m.Parameter(1))); |
+ |
+ FOR_FLOAT64_INPUTS(i) { |
+ FOR_FLOAT64_INPUTS(j) { CheckDoubleEq(*i * *j, m.Call(*i, *j)); } |
+ } |
+} |
+ |
+ |
+TEST(RunFloat64Div) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64, kMachFloat64); |
+ m.Return(m.Float64Div(m.Parameter(0), m.Parameter(1))); |
+ |
+ FOR_FLOAT64_INPUTS(i) { |
+ FOR_FLOAT64_INPUTS(j) { CheckDoubleEq(*i / *j, m.Call(*i, *j)); } |
+ } |
+} |
+ |
+ |
+TEST(RunFloat64Mod) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64, kMachFloat64); |
+ m.Return(m.Float64Mod(m.Parameter(0), m.Parameter(1))); |
+ |
+ FOR_FLOAT64_INPUTS(i) { |
+ FOR_FLOAT64_INPUTS(j) { CheckDoubleEq(modulo(*i, *j), m.Call(*i, *j)); } |
} |
} |
@@ -3389,95 +3407,55 @@ TEST(RunFloat32SubP) { |
TEST(RunFloat32SubImm1) { |
- float input = 0.0f; |
- float output = 0.0f; |
- |
FOR_FLOAT32_INPUTS(i) { |
- RawMachineAssemblerTester<int32_t> m; |
- Node* t0 = m.LoadFromPointer(&input, kMachFloat32); |
- Node* t1 = m.Float32Sub(m.Float32Constant(*i), t0); |
- m.StoreToPointer(&output, kMachFloat32, t1); |
- m.Return(m.Int32Constant(0)); |
- FOR_FLOAT32_INPUTS(j) { |
- input = *j; |
- float expected = *i - input; |
- CHECK_EQ(0, m.Call()); |
- CheckFloatEq(expected, output); |
- } |
+ BufferedRawMachineAssemblerTester<float> m(kMachFloat32); |
+ m.Return(m.Float32Sub(m.Float32Constant(*i), m.Parameter(0))); |
+ |
+ FOR_FLOAT32_INPUTS(j) { CheckFloatEq(*i - *j, m.Call(*j)); } |
} |
} |
TEST(RunFloat32SubImm2) { |
- float input = 0.0f; |
- float output = 0.0f; |
- |
FOR_FLOAT32_INPUTS(i) { |
- RawMachineAssemblerTester<int32_t> m; |
- Node* t0 = m.LoadFromPointer(&input, kMachFloat32); |
- Node* t1 = m.Float32Sub(t0, m.Float32Constant(*i)); |
- m.StoreToPointer(&output, kMachFloat32, t1); |
- m.Return(m.Int32Constant(0)); |
- FOR_FLOAT32_INPUTS(j) { |
- input = *j; |
- float expected = input - *i; |
- CHECK_EQ(0, m.Call()); |
- CheckFloatEq(expected, output); |
- } |
+ BufferedRawMachineAssemblerTester<float> m(kMachFloat32); |
+ m.Return(m.Float32Sub(m.Parameter(0), m.Float32Constant(*i))); |
+ |
+ FOR_FLOAT32_INPUTS(j) { CheckFloatEq(*j - *i, m.Call(*j)); } |
} |
} |
-TEST(RunFloat64SubP) { |
- RawMachineAssemblerTester<int32_t> m; |
- Float64BinopTester bt(&m); |
- |
- bt.AddReturn(m.Float64Sub(bt.param0, bt.param1)); |
+TEST(RunFloat64SubImm1) { |
+ FOR_FLOAT64_INPUTS(i) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64); |
+ m.Return(m.Float64Sub(m.Float64Constant(*i), m.Parameter(0))); |
- FOR_FLOAT64_INPUTS(pl) { |
- FOR_FLOAT64_INPUTS(pr) { |
- double expected = *pl - *pr; |
- CheckDoubleEq(expected, bt.call(*pl, *pr)); |
- } |
+ FOR_FLOAT64_INPUTS(j) { CheckFloatEq(*i - *j, m.Call(*j)); } |
} |
} |
-TEST(RunFloat64SubImm1) { |
- double input = 0.0; |
- double output = 0.0; |
- |
+TEST(RunFloat64SubImm2) { |
FOR_FLOAT64_INPUTS(i) { |
- RawMachineAssemblerTester<int32_t> m; |
- Node* t0 = m.LoadFromPointer(&input, kMachFloat64); |
- Node* t1 = m.Float64Sub(m.Float64Constant(*i), t0); |
- m.StoreToPointer(&output, kMachFloat64, t1); |
- m.Return(m.Int32Constant(0)); |
- FOR_FLOAT64_INPUTS(j) { |
- input = *j; |
- double expected = *i - input; |
- CHECK_EQ(0, m.Call()); |
- CheckDoubleEq(expected, output); |
- } |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64); |
+ m.Return(m.Float64Sub(m.Parameter(0), m.Float64Constant(*i))); |
+ |
+ FOR_FLOAT64_INPUTS(j) { CheckFloatEq(*j - *i, m.Call(*j)); } |
} |
} |
-TEST(RunFloat64SubImm2) { |
- double input = 0.0; |
- double output = 0.0; |
+TEST(RunFloat64SubP) { |
+ RawMachineAssemblerTester<int32_t> m; |
+ Float64BinopTester bt(&m); |
- FOR_FLOAT64_INPUTS(i) { |
- RawMachineAssemblerTester<int32_t> m; |
- Node* t0 = m.LoadFromPointer(&input, kMachFloat64); |
- Node* t1 = m.Float64Sub(t0, m.Float64Constant(*i)); |
- m.StoreToPointer(&output, kMachFloat64, t1); |
- m.Return(m.Int32Constant(0)); |
- FOR_FLOAT64_INPUTS(j) { |
- input = *j; |
- double expected = input - *i; |
- CHECK_EQ(0, m.Call()); |
- CheckDoubleEq(expected, output); |
+ bt.AddReturn(m.Float64Sub(bt.param0, bt.param1)); |
+ |
+ FOR_FLOAT64_INPUTS(pl) { |
+ FOR_FLOAT64_INPUTS(pr) { |
+ double expected = *pl - *pr; |
+ CheckDoubleEq(expected, bt.call(*pl, *pr)); |
} |
} |
} |
@@ -3513,121 +3491,86 @@ TEST(RunFloat64MulP) { |
} |
-TEST(RunFloat64MulAndFloat64AddP) { |
- double input_a = 0.0; |
- double input_b = 0.0; |
- double input_c = 0.0; |
- double output = 0.0; |
+TEST(RunFloat64MulAndFloat64Add1) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64, kMachFloat64, |
+ kMachFloat64); |
+ m.Return(m.Float64Add(m.Float64Mul(m.Parameter(0), m.Parameter(1)), |
+ m.Parameter(2))); |
- { |
- RawMachineAssemblerTester<int32_t> m; |
- Node* a = m.LoadFromPointer(&input_a, kMachFloat64); |
- Node* b = m.LoadFromPointer(&input_b, kMachFloat64); |
- Node* c = m.LoadFromPointer(&input_c, kMachFloat64); |
- m.StoreToPointer(&output, kMachFloat64, |
- m.Float64Add(m.Float64Mul(a, b), c)); |
- m.Return(m.Int32Constant(0)); |
- FOR_FLOAT64_INPUTS(i) { |
- FOR_FLOAT64_INPUTS(j) { |
- FOR_FLOAT64_INPUTS(k) { |
- input_a = *i; |
- input_b = *j; |
- input_c = *k; |
- volatile double temp = input_a * input_b; |
- volatile double expected = temp + input_c; |
- CHECK_EQ(0, m.Call()); |
- CheckDoubleEq(expected, output); |
- } |
+ FOR_FLOAT64_INPUTS(i) { |
+ FOR_FLOAT64_INPUTS(j) { |
+ FOR_FLOAT64_INPUTS(k) { |
+ CheckDoubleEq((*i * *j) + *k, m.Call(*i, *j, *k)); |
} |
} |
} |
- { |
- RawMachineAssemblerTester<int32_t> m; |
- Node* a = m.LoadFromPointer(&input_a, kMachFloat64); |
- Node* b = m.LoadFromPointer(&input_b, kMachFloat64); |
- Node* c = m.LoadFromPointer(&input_c, kMachFloat64); |
- m.StoreToPointer(&output, kMachFloat64, |
- m.Float64Add(a, m.Float64Mul(b, c))); |
- m.Return(m.Int32Constant(0)); |
- FOR_FLOAT64_INPUTS(i) { |
- FOR_FLOAT64_INPUTS(j) { |
- FOR_FLOAT64_INPUTS(k) { |
- input_a = *i; |
- input_b = *j; |
- input_c = *k; |
- volatile double temp = input_b * input_c; |
- volatile double expected = input_a + temp; |
- CHECK_EQ(0, m.Call()); |
- CheckDoubleEq(expected, output); |
- } |
+} |
+ |
+ |
+TEST(RunFloat64MulAndFloat64Add2) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64, kMachFloat64, |
+ kMachFloat64); |
+ m.Return(m.Float64Add(m.Parameter(0), |
+ m.Float64Mul(m.Parameter(1), m.Parameter(2)))); |
+ |
+ FOR_FLOAT64_INPUTS(i) { |
+ FOR_FLOAT64_INPUTS(j) { |
+ FOR_FLOAT64_INPUTS(k) { |
+ CheckDoubleEq(*i + (*j * *k), m.Call(*i, *j, *k)); |
} |
} |
} |
} |
-TEST(RunFloat64MulAndFloat64SubP) { |
- double input_a = 0.0; |
- double input_b = 0.0; |
- double input_c = 0.0; |
- double output = 0.0; |
- |
- RawMachineAssemblerTester<int32_t> m; |
- Node* a = m.LoadFromPointer(&input_a, kMachFloat64); |
- Node* b = m.LoadFromPointer(&input_b, kMachFloat64); |
- Node* c = m.LoadFromPointer(&input_c, kMachFloat64); |
- m.StoreToPointer(&output, kMachFloat64, m.Float64Sub(a, m.Float64Mul(b, c))); |
- m.Return(m.Int32Constant(0)); |
+TEST(RunFloat64MulAndFloat64Sub1) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64, kMachFloat64, |
+ kMachFloat64); |
+ m.Return(m.Float64Sub(m.Float64Mul(m.Parameter(0), m.Parameter(1)), |
+ m.Parameter(2))); |
FOR_FLOAT64_INPUTS(i) { |
FOR_FLOAT64_INPUTS(j) { |
FOR_FLOAT64_INPUTS(k) { |
- input_a = *i; |
- input_b = *j; |
- input_c = *k; |
- volatile double temp = input_b * input_c; |
- volatile double expected = input_a - temp; |
- CHECK_EQ(0, m.Call()); |
- CheckDoubleEq(expected, output); |
+ CheckDoubleEq((*i * *j) - *k, m.Call(*i, *j, *k)); |
} |
} |
} |
} |
-TEST(RunFloat64MulImm) { |
- double input = 0.0; |
- double output = 0.0; |
+TEST(RunFloat64MulAndFloat64Sub2) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64, kMachFloat64, |
+ kMachFloat64); |
+ m.Return(m.Float64Sub(m.Parameter(0), |
+ m.Float64Mul(m.Parameter(1), m.Parameter(2)))); |
- { |
- FOR_FLOAT64_INPUTS(i) { |
- RawMachineAssemblerTester<int32_t> m; |
- Node* t0 = m.LoadFromPointer(&input, kMachFloat64); |
- Node* t1 = m.Float64Mul(m.Float64Constant(*i), t0); |
- m.StoreToPointer(&output, kMachFloat64, t1); |
- m.Return(m.Int32Constant(0)); |
- FOR_FLOAT64_INPUTS(j) { |
- input = *j; |
- double expected = *i * input; |
- CHECK_EQ(0, m.Call()); |
- CheckDoubleEq(expected, output); |
+ FOR_FLOAT64_INPUTS(i) { |
+ FOR_FLOAT64_INPUTS(j) { |
+ FOR_FLOAT64_INPUTS(k) { |
+ CheckDoubleEq(*i - (*j * *k), m.Call(*i, *j, *k)); |
} |
} |
} |
- { |
- FOR_FLOAT64_INPUTS(i) { |
- RawMachineAssemblerTester<int32_t> m; |
- Node* t0 = m.LoadFromPointer(&input, kMachFloat64); |
- Node* t1 = m.Float64Mul(t0, m.Float64Constant(*i)); |
- m.StoreToPointer(&output, kMachFloat64, t1); |
- m.Return(m.Int32Constant(0)); |
- FOR_FLOAT64_INPUTS(j) { |
- input = *j; |
- double expected = input * *i; |
- CHECK_EQ(0, m.Call()); |
- CheckDoubleEq(expected, output); |
- } |
- } |
+} |
+ |
+ |
+TEST(RunFloat64MulImm1) { |
+ FOR_FLOAT64_INPUTS(i) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64); |
+ m.Return(m.Float64Mul(m.Float64Constant(*i), m.Parameter(0))); |
+ |
+ FOR_FLOAT64_INPUTS(j) { CheckFloatEq(*i * *j, m.Call(*j)); } |
+ } |
+} |
+ |
+ |
+TEST(RunFloat64MulImm2) { |
+ FOR_FLOAT64_INPUTS(i) { |
+ BufferedRawMachineAssemblerTester<double> m(kMachFloat64); |
+ m.Return(m.Float64Mul(m.Parameter(0), m.Float64Constant(*i))); |
+ |
+ FOR_FLOAT64_INPUTS(j) { CheckFloatEq(*j * *i, m.Call(*j)); } |
} |
} |
@@ -3679,34 +3622,18 @@ TEST(RunFloat64ModP) { |
TEST(RunChangeInt32ToFloat64_A) { |
- RawMachineAssemblerTester<int32_t> m; |
int32_t magic = 0x986234; |
- double result = 0; |
- |
- Node* convert = m.ChangeInt32ToFloat64(m.Int32Constant(magic)); |
- m.Store(kMachFloat64, m.PointerConstant(&result), m.Int32Constant(0), convert, |
- kNoWriteBarrier); |
- m.Return(m.Int32Constant(magic)); |
- |
- CHECK_EQ(magic, m.Call()); |
- CHECK_EQ(static_cast<double>(magic), result); |
+ BufferedRawMachineAssemblerTester<double> m; |
+ m.Return(m.ChangeInt32ToFloat64(m.Int32Constant(magic))); |
+ CheckDoubleEq(static_cast<double>(magic), m.Call()); |
} |
TEST(RunChangeInt32ToFloat64_B) { |
- RawMachineAssemblerTester<int32_t> m(kMachInt32); |
- double output = 0; |
- |
- Node* convert = m.ChangeInt32ToFloat64(m.Parameter(0)); |
- m.Store(kMachFloat64, m.PointerConstant(&output), m.Int32Constant(0), convert, |
- kNoWriteBarrier); |
- m.Return(m.Parameter(0)); |
+ BufferedRawMachineAssemblerTester<double> m(kMachInt32); |
+ m.Return(m.ChangeInt32ToFloat64(m.Parameter(0))); |
- FOR_INT32_INPUTS(i) { |
- int32_t expect = *i; |
- CHECK_EQ(expect, m.Call(expect)); |
- CHECK_EQ(static_cast<double>(expect), output); |
- } |
+ FOR_INT32_INPUTS(i) { CheckDoubleEq(static_cast<double>(*i), m.Call(*i)); } |
} |
@@ -3760,59 +3687,28 @@ TEST(RunChangeUint32ToFloat64_spilled) { |
TEST(RunChangeFloat64ToInt32_A) { |
- RawMachineAssemblerTester<int32_t> m; |
- int32_t magic = 0x786234; |
- double input = 11.1; |
- int32_t result = 0; |
- |
- m.Store(kMachInt32, m.PointerConstant(&result), m.Int32Constant(0), |
- m.ChangeFloat64ToInt32(m.Float64Constant(input)), kNoWriteBarrier); |
- m.Return(m.Int32Constant(magic)); |
- |
- CHECK_EQ(magic, m.Call()); |
- CHECK_EQ(static_cast<int32_t>(input), result); |
+ BufferedRawMachineAssemblerTester<int32_t> m; |
+ double magic = 11.1; |
+ m.Return(m.ChangeFloat64ToInt32(m.Float64Constant(magic))); |
+ CHECK_EQ(static_cast<int32_t>(magic), m.Call()); |
} |
TEST(RunChangeFloat64ToInt32_B) { |
- RawMachineAssemblerTester<int32_t> m; |
- double input = 0; |
- int32_t output = 0; |
+ BufferedRawMachineAssemblerTester<int32_t> m(kMachFloat64); |
+ m.Return(m.ChangeFloat64ToInt32(m.Parameter(0))); |
- Node* load = |
- m.Load(kMachFloat64, m.PointerConstant(&input), m.Int32Constant(0)); |
- Node* convert = m.ChangeFloat64ToInt32(load); |
- m.Store(kMachInt32, m.PointerConstant(&output), m.Int32Constant(0), convert, |
- kNoWriteBarrier); |
- m.Return(convert); |
+ // Note we don't check fractional inputs, or inputs outside the range of |
+ // int32, because these Convert operators really should be Change operators. |
+ FOR_INT32_INPUTS(i) { CHECK_EQ(*i, m.Call(static_cast<double>(*i))); } |
- { |
- FOR_INT32_INPUTS(i) { |
- input = *i; |
- int32_t expect = *i; |
- CHECK_EQ(expect, m.Call()); |
- CHECK_EQ(expect, output); |
- } |
+ for (int32_t n = 1; n < 31; ++n) { |
+ CHECK_EQ(1 << n, m.Call(static_cast<double>(1 << n))); |
} |
- // Check various powers of 2. |
for (int32_t n = 1; n < 31; ++n) { |
- { |
- input = 1 << n; |
- int32_t expect = static_cast<int32_t>(input); |
- CHECK_EQ(expect, m.Call()); |
- CHECK_EQ(expect, output); |
- } |
- |
- { |
- input = 3 << n; |
- int32_t expect = static_cast<int32_t>(input); |
- CHECK_EQ(expect, m.Call()); |
- CHECK_EQ(expect, output); |
- } |
+ CHECK_EQ(3 << n, m.Call(static_cast<double>(3 << n))); |
} |
- // Note we don't check fractional inputs, because these Convert operators |
- // really should be Change operators. |
} |