| 102 | } |
| 103 | |
| 104 | void calculate() const { |
| 105 | // addition |
| 106 | ASSERT_EQUALS("256", MathLib::add("0xff", "1")); |
| 107 | ASSERT_EQUALS("249", MathLib::add("250", "-1")); |
| 108 | ASSERT_EQUALS("251", MathLib::add("250", "1")); |
| 109 | ASSERT_EQUALS("-2.0", MathLib::add("-1.", "-1")); |
| 110 | ASSERT_EQUALS("-1", MathLib::add("0", "-1")); |
| 111 | ASSERT_EQUALS("1", MathLib::add("1", "0")); |
| 112 | ASSERT_EQUALS("0.0", MathLib::add("0", "0.")); |
| 113 | ASSERT_EQUALS("1.00000001", MathLib::add("1", "0.00000001")); // #4016 |
| 114 | ASSERT_EQUALS("30666.22", MathLib::add("30666.22", "0.0")); // #4068 |
| 115 | |
| 116 | // subtraction |
| 117 | ASSERT_EQUALS("254", MathLib::subtract("0xff", "1")); |
| 118 | ASSERT_EQUALS("251", MathLib::subtract("250", "-1")); |
| 119 | ASSERT_EQUALS("249", MathLib::subtract("250", "1")); |
| 120 | ASSERT_EQUALS("0.0", MathLib::subtract("-1.", "-1")); |
| 121 | ASSERT_EQUALS("1", MathLib::subtract("0", "-1")); |
| 122 | ASSERT_EQUALS("1", MathLib::subtract("1", "0")); |
| 123 | ASSERT_EQUALS("0.0", MathLib::subtract("0", "0.")); |
| 124 | ASSERT_EQUALS("0.99999999", MathLib::subtract("1", "0.00000001")); // #4016 |
| 125 | ASSERT_EQUALS("30666.22", MathLib::subtract("30666.22", "0.0")); // #4068 |
| 126 | ASSERT_EQUALS("0.0", MathLib::subtract("0.0", "0.0")); |
| 127 | |
| 128 | // multiply |
| 129 | ASSERT_EQUALS("-0.003", MathLib::multiply("-1e-3", "3")); |
| 130 | ASSERT_EQUALS("-11.96", MathLib::multiply("-2.3", "5.2")); |
| 131 | ASSERT_EQUALS("3000.0", MathLib::multiply("1E3", "3")); |
| 132 | ASSERT_EQUALS("3000.0", MathLib::multiply("1E+3", "3")); |
| 133 | ASSERT_EQUALS("3000.0", MathLib::multiply("1.0E3", "3")); |
| 134 | ASSERT_EQUALS("-3000.0", MathLib::multiply("-1.0E3", "3")); |
| 135 | ASSERT_EQUALS("-3000.0", MathLib::multiply("-1.0E+3", "3")); |
| 136 | ASSERT_EQUALS("0.0", MathLib::multiply("+1.0E+3", "0")); |
| 137 | ASSERT_EQUALS("2147483648", MathLib::multiply("2","1073741824")); |
| 138 | ASSERT_EQUALS("536870912", MathLib::multiply("512","1048576")); |
| 139 | |
| 140 | // divide |
| 141 | ASSERT_EQUALS("1", MathLib::divide("1", "1")); |
| 142 | ASSERT_EQUALS("0", MathLib::divide("0", "1")); |
| 143 | ASSERT_EQUALS("5", MathLib::divide("-10", "-2")); |
| 144 | ASSERT_EQUALS("-2.5", MathLib::divide("-10.", "4")); |
| 145 | ASSERT_EQUALS("2.5", MathLib::divide("-10.", "-4")); |
| 146 | ASSERT_EQUALS("5.0", MathLib::divide("25.5", "5.1")); |
| 147 | ASSERT_EQUALS("7.0", MathLib::divide("21.", "3")); |
| 148 | ASSERT_EQUALS("1", MathLib::divide("3", "2")); |
| 149 | ASSERT_THROW_INTERNAL_EQUALS(MathLib::divide("123", "0"), INTERNAL, "Internal Error: Division by zero"); // decimal zero: throw |
| 150 | ASSERT_THROW_INTERNAL_EQUALS(MathLib::divide("123", "00"), INTERNAL, "Internal Error: Division by zero"); // octal zero: throw |
| 151 | ASSERT_THROW_INTERNAL_EQUALS(MathLib::divide("123", "0x0"), INTERNAL, "Internal Error: Division by zero"); // hex zero: throw |
| 152 | ASSERT_NO_THROW(MathLib::divide("123", "0.0f")); // float zero |
| 153 | ASSERT_NO_THROW(MathLib::divide("123", "0.0")); // double zero |
| 154 | ASSERT_NO_THROW(MathLib::divide("123", "0.0L")); // long double zero |
| 155 | ASSERT_THROW_INTERNAL_EQUALS(MathLib::divide("-9223372036854775808", "-1"), INTERNAL, "Internal Error: Division overflow"); // #4520 - out of range => throw |
| 156 | ASSERT_EQUALS("4611686018427387904", MathLib::divide("-9223372036854775808", "-2")); // #6679 |
| 157 | |
| 158 | |
| 159 | // invoke for each supported action |
| 160 | ASSERT_EQUALS("3", MathLib::calculate("2", "1", '+')); |
| 161 | ASSERT_EQUALS("1", MathLib::calculate("2", "1", '-')); |
nothing calls this directly
no test coverage detected