diff options
| -rw-r--r-- | tests/test.hpp | 5 | ||||
| -rw-r--r-- | tests/test_xpath_operators.cpp | 23 | 
2 files changed, 26 insertions, 2 deletions
diff --git a/tests/test.hpp b/tests/test.hpp index 166cce5..5bbfbbd 100644 --- a/tests/test.hpp +++ b/tests/test.hpp @@ -3,6 +3,7 @@  #include <string.h>
  #include <math.h>
 +#include <float.h>
  #include <sstream>
  #include "../src/pugixml.hpp"
 @@ -52,7 +53,11 @@ inline bool test_xpath_number_nan(const pugi::xml_node& node, const char* query)  	double r = q.evaluate_number(node);
 +#ifdef _MSC_VER
 +	return _isnan(r) != 0;
 +#else
  	return r != r;
 +#endif
  }
  inline bool test_xpath_fail_compile(const char* query)
 diff --git a/tests/test_xpath_operators.cpp b/tests/test_xpath_operators.cpp index 7ff2f70..db834cd 100644 --- a/tests/test_xpath_operators.cpp +++ b/tests/test_xpath_operators.cpp @@ -1,5 +1,9 @@  #include "common.hpp"
 +#if defined(_MSC_VER) && _MSC_VER == 1200
 +#define MSVC6_NAN_BUG // NaN comparison on MSVC6 is incorrect, see http://www.nabble.com/assertDoubleEquals,-NaN---Microsoft-Visual-Studio-6-td9137859.html
 +#endif
 +
  TEST_XML(xpath_operators_arithmetic, "<node><foo-bar>10</foo-bar><foo>2</foo><bar>3</bar></node>")
  {
  	xml_node c;
 @@ -125,9 +129,12 @@ TEST(xpath_operators_equality_primitive_number)  	// infinity/nan
  	CHECK_XPATH_BOOLEAN(c, "1 div 0 = 2 div 0", true);
  	CHECK_XPATH_BOOLEAN(c, "-1 div 0 != 2 div 0", true);
 +
 +#ifndef MSVC6_NAN_BUG
  	CHECK_XPATH_BOOLEAN(c, "0 div 0 = 1", false);
  	CHECK_XPATH_BOOLEAN(c, "0 div 0 != 1", true);
  	CHECK_XPATH_BOOLEAN(c, "0 div 0 = 0 div 0", false);
 +#endif
  	// upcast to number
  	CHECK_XPATH_BOOLEAN(c, "2 = '2'", true);
 @@ -190,14 +197,17 @@ TEST_XML(xpath_operators_equality_node_set_primitive, "<node><c1><v>1</v><v>-1</  	CHECK_XPATH_BOOLEAN(n, "c1/v != 1", true);
  	CHECK_XPATH_BOOLEAN(n, "c1/v = 5", false);
  	CHECK_XPATH_BOOLEAN(n, "c2/v = 1", true);
 -	CHECK_XPATH_BOOLEAN(n, "c2/v != 1", true);
  	CHECK_XPATH_BOOLEAN(n, "1 = c1/v", true);
  	CHECK_XPATH_BOOLEAN(n, "-1 = c1/v", true);
  	CHECK_XPATH_BOOLEAN(n, "1 != c1/v", true);
  	CHECK_XPATH_BOOLEAN(n, "5 = c1/v", false);
  	CHECK_XPATH_BOOLEAN(n, "1 = c2/v", true);
 +
 +#ifndef MSVC6_NAN_BUG
 +	CHECK_XPATH_BOOLEAN(n, "c2/v != 1", true);
  	CHECK_XPATH_BOOLEAN(n, "1 != c2/v", true);
 +#endif
  	// node set vs string
  	CHECK_XPATH_BOOLEAN(c, "x = '1'", false);
 @@ -259,10 +269,12 @@ TEST(xpath_operators_inequality_primitive)  	CHECK_XPATH_BOOLEAN(c, "-1 div 0 < 2 div 0", true);
  	CHECK_XPATH_BOOLEAN(c, "-1 div 0 > 2 div 0", false);
 +#ifndef MSVC6_NAN_BUG
  	CHECK_XPATH_BOOLEAN(c, "0 div 0 < 1", false);
  	CHECK_XPATH_BOOLEAN(c, "0 div 0 <= 1", false);
  	CHECK_XPATH_BOOLEAN(c, "0 div 0 > 1", false);
  	CHECK_XPATH_BOOLEAN(c, "0 div 0 >= 1", false);
 +#endif
  	// upcast to number
  	CHECK_XPATH_BOOLEAN(c, "2 < '2'", false);
 @@ -277,7 +289,7 @@ TEST(xpath_operators_inequality_primitive)  	CHECK_XPATH_BOOLEAN(c, "1 > true()", false);
  }
 -TEST_XML(xpath_operators_inequality_node_set_node_set, "<node><c1><v>1</v><v>-1</v><v>-100</v></c1><c2><v>1</v><v>nan</v></c2></node>")
 +TEST_XML(xpath_operators_inequality_node_set_node_set, "<node><c1><v>1</v><v>-1</v><v>-100</v></c1><c2><v>1</v><v>nan</v></c2><c3><v>1</v><v>-4</v></c3></node>")
  {
  	xml_node c;
  	xml_node n = doc.child("node");
 @@ -298,10 +310,17 @@ TEST_XML(xpath_operators_inequality_node_set_node_set, "<node><c1><v>1</v><v>-1<  	CHECK_XPATH_BOOLEAN(n, "x >= c1/v", false);
  	CHECK_XPATH_BOOLEAN(n, "x <= c1/v", false);
 +	CHECK_XPATH_BOOLEAN(n, "c1/v > c3/v", true);
 +	CHECK_XPATH_BOOLEAN(n, "c1/v >= c3/v", true);
 +	CHECK_XPATH_BOOLEAN(n, "c1/v < c3/v", true);
 +	CHECK_XPATH_BOOLEAN(n, "c1/v <= c3/v", true);
 +
 +#ifndef MSVC6_NAN_BUG
  	CHECK_XPATH_BOOLEAN(n, "c1/v > c2/v", false);
  	CHECK_XPATH_BOOLEAN(n, "c1/v >= c2/v", true);
  	CHECK_XPATH_BOOLEAN(n, "c1/v < c2/v", true);
  	CHECK_XPATH_BOOLEAN(n, "c1/v <= c2/v", true);
 +#endif
  }
  TEST_XML(xpath_operators_inequality_node_set_primitive, "<node><c1><v>1</v><v>-1</v><v>-100</v></c1><c2><v>1</v><v>nan</v></c2></node>")
  | 
