From 707cc94fe52463870a9c6c8e2e66eaaa389e601d Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 24 Feb 2009 15:16:26 +0200 Subject: Start tracking XSD/e with git after version 3.0.0 --- tests/cxx/hybrid/sequences/driver.cxx | 442 ++++++++++++++++++++++++++++++++++ 1 file changed, 442 insertions(+) create mode 100644 tests/cxx/hybrid/sequences/driver.cxx (limited to 'tests/cxx/hybrid/sequences/driver.cxx') diff --git a/tests/cxx/hybrid/sequences/driver.cxx b/tests/cxx/hybrid/sequences/driver.cxx new file mode 100644 index 0000000..3d6c702 --- /dev/null +++ b/tests/cxx/hybrid/sequences/driver.cxx @@ -0,0 +1,442 @@ +// file : tests/cxx/hybrid/sequences/driver.cxx +// author : Boris Kolpackov +// copyright : Copyright (c) 2006-2009 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test sequence templates. +// +#include +#include + +#include + +#ifndef XSDE_STL +#include +#endif + +#include + +using std::string; +using namespace xsde::cxx::hybrid; + +void data_destructor (void* p, size_t) +{ + delete static_cast (p); +} + +void data_destructor_pos (void* p, size_t i) +{ + switch (i) + { + case 0: + { + delete static_cast (p); + break; + } + case 1: + { + delete static_cast (p); + break; + } + } +} + +int +main () +{ + // + // pod_seq + // + typedef pod_seq pod; + + { + pod s; + s.push_back (111); + assert (s.size () == 1 && s[0] == 111); + s.pop_back (); + assert (s.size () == 0); + } + + { + pod s; + s.push_back (111); + s.erase (s.begin ()); + assert (s.size () == 0); + + s.push_back (111); + s.push_back (222); + s.push_back (333); + s.erase (s.begin ()); + assert (s.size () == 2 && s[0] == 222 && s[1] == 333); + + s.push_back (444); + s.erase (s.begin () + 1); + assert (s.size () == 2 && s[0] == 222 && s[1] == 444); + + s.push_back (555); + s.erase (s.begin () + 2); + assert (s.size () == 2 && s[0] == 222 && s[1] == 444); + } + + { + pod s; + s.reserve (2); + s.push_back (111); + s.push_back (222); + s.push_back (333); + assert (s.size () == 3 && s[0] == 111 && s[1] == 222 && s[2] == 333); + } + + { + pod s; + s.insert (s.begin (), 111); + assert (s.size () == 1 && s[0] == 111); + s.push_back (222); + s.push_back (333); + + s.insert (s.begin (), 444); + assert (s[0] == 444); + + s.insert (s.begin () + 1, 555); + assert (s[1] == 555); + + s.insert (s.end (), 666); + assert (s[5] == 666); + + assert (s[0] == 444 && s[1] == 555 && s[2] == 111 && + s[3] == 222 && s[4] == 333 && s[5] == 666); + } + + { + pod s; + s.reserve (2); + s.push_back (111); + s.push_back (222); + s.insert (s.begin () + 1, 333); + assert (s[0] == 111 && s[1] == 333 && s[2] == 222); + } + + // + // fix_seq + // + typedef fix_seq fix; + + { + fix s; + s.push_back ("aaa"); + assert (s.size () == 1 && s[0] == "aaa"); + s.pop_back (); + assert (s.size () == 0); + } + + { + fix s; + s.push_back ("aaa"); + s.erase (s.begin ()); + assert (s.size () == 0); + + s.push_back ("aaa"); + s.push_back ("bbb"); + s.push_back ("ccc"); + s.erase (s.begin ()); + assert (s.size () == 2 && s[0] == "bbb" && s[1] == "ccc"); + + s.push_back ("ddd"); + s.erase (s.begin () + 1); + assert (s.size () == 2 && s[0] == "bbb" && s[1] == "ddd"); + + s.push_back ("eee"); + s.erase (s.begin () + 2); + assert (s.size () == 2 && s[0] == "bbb" && s[1] == "ddd"); + } + + { + fix s; + s.reserve (2); + s.push_back ("aaa"); + s.push_back ("bbb"); + s.push_back ("ccc"); + assert (s.size () == 3 && s[0] == "aaa" && + s[1] == "bbb" && s[2] == "ccc"); + } + + { + fix s; + s.insert (s.begin (), "aaa"); + assert (s.size () == 1 && s[0] == "aaa"); + s.push_back ("bbb"); + s.push_back ("ccc"); + + s.insert (s.begin (), "ddd"); + assert (s[0] == "ddd"); + + s.insert (s.begin () + 1, "eee"); + assert (s[1] == "eee"); + + s.insert (s.end (), "fff"); + assert (s[5] == "fff"); + + assert (s[0] == "ddd" && s[1] == "eee" && s[2] == "aaa" && + s[3] == "bbb" && s[4] == "ccc" && s[5] == "fff"); + } + + { + fix s; + s.reserve (2); + s.push_back ("aaa"); + s.push_back ("bbb"); + s.insert (s.begin () + 1, "ccc"); + assert (s[0] == "aaa" && s[1] == "ccc" && s[2] == "bbb"); + } + + // + // var_seq + // + typedef var_seq var; + + { + var s; + s.push_back (new string ("aaa")); + assert (s.size () == 1 && s[0] == "aaa"); + s.pop_back (); + assert (s.size () == 0); + } + + { + var s; + s.push_back (new string ("aaa")); + s.erase (s.begin ()); + assert (s.size () == 0); + + s.push_back (new string ("aaa")); + s.push_back (new string ("bbb")); + s.push_back (new string ("ccc")); + s.erase (s.begin ()); + assert (s.size () == 2 && s[0] == "bbb" && s[1] == "ccc"); + + s.push_back (new string ("ddd")); + s.erase (s.begin () + 1); + assert (s.size () == 2 && s[0] == "bbb" && s[1] == "ddd"); + + s.push_back (new string ("eee")); + s.erase (s.begin () + 2); + assert (s.size () == 2 && s[0] == "bbb" && s[1] == "ddd"); + } + + { + var s; + s.reserve (2); + s.push_back (new string ("aaa")); + s.push_back (new string ("bbb")); + s.push_back (new string ("ccc")); + assert (s.size () == 3 && s[0] == "aaa" && + s[1] == "bbb" && s[2] == "ccc"); + } + + { + var s; + s.insert (s.begin (), new string ("aaa")); + assert (s.size () == 1 && s[0] == "aaa"); + s.push_back (new string ("bbb")); + s.push_back (new string ("ccc")); + + s.insert (s.begin (), new string ("ddd")); + assert (s[0] == "ddd"); + + s.insert (s.begin () + 1, new string ("eee")); + assert (s[1] == "eee"); + + s.insert (s.end (), new string ("fff")); + assert (s[5] == "fff"); + + assert (s[0] == "ddd" && s[1] == "eee" && s[2] == "aaa" && + s[3] == "bbb" && s[4] == "ccc" && s[5] == "fff"); + } + + { + var s; + s.reserve (2); + s.push_back (new string ("aaa")); + s.push_back (new string ("bbb")); + s.insert (s.begin () + 1, new string ("ccc")); + assert (s[0] == "aaa" && s[1] == "ccc" && s[2] == "bbb"); + } + + // + // str_seq + // + typedef str_seq str; + +#ifndef XSDE_STL + using xsde::cxx::strdupx; + + { + str s; + s.push_back (strdupx ("aaa")); + assert (s.size () == 1 && s[0] == string ("aaa")); + s.pop_back (); + assert (s.size () == 0); + } + + { + str s; + s.push_back_copy ("aaa"); + s.erase (s.begin ()); + assert (s.size () == 0); + + s.push_back_copy ("aaa"); + s.push_back_copy ("bbb"); + s.push_back_copy ("ccc"); + s.erase (s.begin ()); + assert (s.size () == 2 && + s[0] == string ("bbb") && s[1] == string ("ccc")); + + s.push_back_copy ("ddd"); + s.erase (s.begin () + 1); + assert (s.size () == 2 && + s[0] == string ("bbb") && s[1] == string ("ddd")); + + s.push_back_copy ("eee"); + s.erase (s.begin () + 2); + assert (s.size () == 2 && + s[0] == string ("bbb") && s[1] == string ("ddd")); + } + + { + str s; + s.reserve (2); + s.push_back_copy ("aaa"); + s.push_back_copy ("bbb"); + s.push_back_copy ("ccc"); + assert (s.size () == 3 && + s[0] == string ("aaa") && + s[1] == string ("bbb") && + s[2] == string ("ccc")); + } + + { + str s; + s.insert (s.begin (), strdupx ("aaa")); + assert (s.size () == 1 && s[0] == string ("aaa")); + s.push_back_copy ("bbb"); + s.push_back_copy ("ccc"); + + s.insert (s.begin (), strdupx ("ddd")); + assert (s[0] == string ("ddd")); + + s.insert (s.begin () + 1, strdupx ("eee")); + assert (s[1] == string ("eee")); + + s.insert (s.end (), strdupx ("fff")); + assert (s[5] == string ("fff")); + + assert (s[0] == string ("ddd") && s[1] == string ("eee") && + s[2] == string ("aaa") && s[3] == string ("bbb") && + s[4] == string ("ccc") && s[5] == string ("fff")); + } + + { + str s; + s.reserve (2); + s.push_back_copy ("aaa"); + s.push_back_copy ("bbb"); + s.insert (s.begin () + 1, strdupx ("ccc")); + assert (s[0] == string ("aaa") && + s[1] == string ("ccc") && + s[2] == string ("bbb")); + } + +#else + + { + str s; + s.push_back ("aaa"); + assert (s.size () == 1 && s[0] == "aaa"); + s.pop_back (); + assert (s.size () == 0); + } + + { + str s; + s.push_back ("aaa"); + s.erase (s.begin ()); + assert (s.size () == 0); + + s.push_back ("aaa"); + s.push_back ("bbb"); + s.push_back ("ccc"); + s.erase (s.begin ()); + assert (s.size () == 2 && s[0] == "bbb" && s[1] == "ccc"); + + s.push_back ("ddd"); + s.erase (s.begin () + 1); + assert (s.size () == 2 && s[0] == "bbb" && s[1] == "ddd"); + + s.push_back ("eee"); + s.erase (s.begin () + 2); + assert (s.size () == 2 && s[0] == "bbb" && s[1] == "ddd"); + } + + { + str s; + s.reserve (2); + s.push_back ("aaa"); + s.push_back ("bbb"); + s.push_back ("ccc"); + assert (s.size () == 3 && + s[0] == "aaa" && s[1] == "bbb" && s[2] == "ccc"); + } + + { + str s; + s.insert (s.begin (), "aaa"); + assert (s.size () == 1 && s[0] == "aaa"); + s.push_back ("bbb"); + s.push_back ("ccc"); + + s.insert (s.begin (), "ddd"); + assert (s[0] == "ddd"); + + s.insert (s.begin () + 1, "eee"); + assert (s[1] == "eee"); + + s.insert (s.end (), "fff"); + assert (s[5] == "fff"); + + assert (s[0] == "ddd" && s[1] == "eee" && s[2] == "aaa" && + s[3] == "bbb" && s[4] == "ccc" && s[5] == "fff"); + } + + { + str s; + s.reserve (2); + s.push_back ("aaa"); + s.push_back ("bbb"); + s.insert (s.begin () + 1, "ccc"); + assert (s[0] == "aaa" && s[1] == "ccc" && s[2] == "bbb"); + } +#endif + + // + // data_seq + // + typedef data_seq data; + + { + data s; + s.destructor (&data_destructor); + s.push_back (new string ("aaa")); + s.push_back (new string ("bbb")); + assert (*static_cast (s[0]) == "aaa" && + *static_cast (s[1]) == "bbb"); + } + + { + data s; + s.destructor (&data_destructor_pos); + s.push_back (new string ("aaa")); + s.push_back (new int (5)); + assert (*static_cast (s[0]) == "aaa" && + *static_cast (s[1]) == 5); + } +} -- cgit v1.1