From 83183769c1125b3aa489205dd880bf94830831bd Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Wed, 28 Oct 2009 07:40:15 +0000 Subject: tests: Added function arguments tests, added arithmetic operators tests git-svn-id: http://pugixml.googlecode.com/svn/trunk@181 99668b35-9821-0410-8761-19e4c4f06640 --- tests/test_xpath_operators.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 tests/test_xpath_operators.cpp (limited to 'tests/test_xpath_operators.cpp') diff --git a/tests/test_xpath_operators.cpp b/tests/test_xpath_operators.cpp new file mode 100644 index 0000000..41005d4 --- /dev/null +++ b/tests/test_xpath_operators.cpp @@ -0,0 +1,65 @@ +#include "common.hpp" + +TEST_XML(xpath_operators_arithmetic, "1023") +{ + xml_node c; + xml_node n = doc.child("node"); + + // incorrect unary operator + CHECK_XPATH_FAIL("-"); + + // correct unary operator + CHECK_XPATH_NUMBER(c, "-1", -1); + CHECK_XPATH_NUMBER(c, "--1", 1); + CHECK_XPATH_NUMBER(c, "---1", -1); + + // incorrect binary operators + CHECK_XPATH_FAIL("5+"); + CHECK_XPATH_FAIL("5-"); + CHECK_XPATH_FAIL("5*"); + CHECK_XPATH_FAIL("+5"); + CHECK_XPATH_FAIL("*5"); + CHECK_XPATH_FAIL("1div2"); + CHECK_XPATH_FAIL("1mod"); + CHECK_XPATH_FAIL("1div"); + + // correct trivial binary operators + CHECK_XPATH_NUMBER(c, "1 + 2", 3); + CHECK_XPATH_NUMBER(c, "1+2", 3); + CHECK_XPATH_NUMBER(c, "1 * 2", 2); + CHECK_XPATH_NUMBER(c, "1*2", 2); + CHECK_XPATH_NUMBER(c, "1 div 2", 0.5); + + // operator precedence + CHECK_XPATH_NUMBER(c, "2 + 2 * 2 div 1 mod 3", 3); + CHECK_XPATH_NUMBER(c, "2 + 2 * 2 div (1 mod 3)", 6); + CHECK_XPATH_NUMBER(c, "(2 + 2) * 2 div (1 mod 3)", 8); + CHECK_XPATH_NUMBER(c, "(2 + 2) * (2 div 1) mod 3", 2); + CHECK_XPATH_NUMBER(c, "2 - -2", 4); + CHECK_XPATH_NUMBER(c, "2--2", 4); + CHECK_XPATH_NUMBER(c, "1-2-3", -4); + + // infinity/nan + CHECK_XPATH_STRING(c, "1 div 0", "Infinity"); + CHECK_XPATH_STRING(c, "-1 div 0", "-Infinity"); + CHECK_XPATH_STRING(c, "-1 div 0 + 1 div 0", "NaN"); + CHECK_XPATH_STRING(c, "0 div 0", "NaN"); + CHECK_XPATH_STRING(c, "1 div 0 + 1 div 0", "Infinity"); + CHECK_XPATH_STRING(c, "-1 div 0 + -1 div 0", "-Infinity"); + CHECK_XPATH_STRING(c, "1 div 0 + 100", "Infinity"); + CHECK_XPATH_STRING(c, "-1 div 0 + 100", "-Infinity"); + CHECK_XPATH_STRING(c, "0 div 0 + 100", "NaN"); + + // mod, from W3C standard + CHECK_XPATH_NUMBER(c, "5 mod 2", 1); + CHECK_XPATH_NUMBER(c, "5 mod -2", 1); + CHECK_XPATH_NUMBER(c, "-5 mod 2", -1); + CHECK_XPATH_NUMBER(c, "-5 mod -2", -1); + + // correct subtraction parsing, from W3C standard + CHECK_XPATH_NUMBER(n, "foo-bar", 10); + CHECK_XPATH_NUMBER(n, "foo -bar", -1); + CHECK_XPATH_NUMBER(n, "foo - bar", -1); + CHECK_XPATH_NUMBER(n, "-foo-bar", -10); + CHECK_XPATH_NUMBER(n, "-foo -bar", -5); +} -- cgit v1.2.3