// file : cxx/parser/validation/built-in/int/driver.cxx // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in int and unsigned int types validation. // #include #include #undef NDEBUG #include using namespace xsd::cxx::parser::validating; template bool test_post_fail (T& p) { try { p._post (); } catch (invalid_value const&) { return true; } return false; } int main () { // Good. // { int_pimpl p; p.pre (); p._pre (); p._characters ("-2147483648"); p._post (); assert (p.post_int () == -2147483647 - 1); } { int_pimpl p; p.pre (); p._pre (); p._characters ("0"); p._post (); assert (p.post_int () == 0); } { int_pimpl p; p.pre (); p._pre (); p._characters ("2147483647"); p._post (); assert (p.post_int () == 2147483647); } { unsigned_int_pimpl p; p.pre (); p._pre (); p._characters ("0"); p._post (); assert (p.post_unsigned_int () == 0); } { unsigned_int_pimpl p; p.pre (); p._pre (); p._characters ("4294967295"); p._post (); assert (p.post_unsigned_int () == 4294967295); } // Bad // { unsigned_int_pimpl p; p.pre (); p._pre (); p._characters ("-123"); assert (test_post_fail (p)); } // Ranges // { int_pimpl p; p.pre (); p._pre (); p._characters ("-2147483649"); assert (test_post_fail (p)); } { int_pimpl p; p.pre (); p._pre (); p._characters ("2147483648"); assert (test_post_fail (p)); } { unsigned_int_pimpl p; p.pre (); p._pre (); p._characters ("4294967296"); assert (test_post_fail (p)); } }