%description: Test nan/inf with cDynamicExpression. %global: void test(const char *expr) { cDynamicExpression e; std::string result; try { e.parse(expr); cNedValue v = e.evaluate(); result = v.str(); } catch (std::exception& ex) { result = ex.what(); } EV << expr << " ==> " << result << "\n"; } void test(const char *s1, const std::string& s2, const char *s3) { test((std::string(s1) + " " + s2 + " " + s3).c_str()); } %activity: // constants test("nan"); test("inf"); test("-inf"); // ...with unit test("nan s"); test("inf ms"); test("-inf ns"); EV << "\n"; // some operators test("1+inf"); test("-inf+inf"); test("2*nan"); EV << "\n"; // ...with unit test("1s + inf s"); test("-inf s + inf ms"); test("2*nan s"); EV << "\n"; // comparison test("1+inf == 1/0.0"); test("1+nan == nan"); test("nan == nan"); EV << "\n"; // ...with unit test("1s + inf ms == 1s/0.0"); test("nan s == nan"); EV << ".\n"; %subst: /4\.294\d*e\+0*9/_maxlong_/ %subst: /1\.844\d*e\+0*19/_maxlong_/ %contains: stdout nan ==> nan inf ==> inf -inf ==> -inf nan s ==> nan s inf ms ==> inf ms -inf ns ==> -inf ns 1+inf ==> inf -inf+inf ==> nan 2*nan ==> nan 1s + inf s ==> inf s -inf s + inf ms ==> nan s 2*nan s ==> nan s 1+inf == 1/0.0 ==> true 1+nan == nan ==> false nan == nan ==> false 1s + inf ms == 1s/0.0 ==> true nan s == nan ==> false .