diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-01-14 11:46:32 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-01-14 11:46:32 +0200 |
commit | c2339b07fb683355c6a6155ec312b1616167614e (patch) | |
tree | 7ef5437f838ddfd1a1631dcd471bc89b63679177 /tests/build/prefix_map | |
parent | ce8a94e6a76097ef7eeb34df4257991a20599712 (diff) |
Implement prefix_map
Diffstat (limited to 'tests/build/prefix_map')
-rw-r--r-- | tests/build/prefix_map/buildfile | 2 | ||||
-rw-r--r-- | tests/build/prefix_map/driver.cxx | 156 |
2 files changed, 158 insertions, 0 deletions
diff --git a/tests/build/prefix_map/buildfile b/tests/build/prefix_map/buildfile new file mode 100644 index 0000000..dbef7db --- /dev/null +++ b/tests/build/prefix_map/buildfile @@ -0,0 +1,2 @@ +exe{driver}: obj{driver} +obj{driver}: cxx{driver} diff --git a/tests/build/prefix_map/driver.cxx b/tests/build/prefix_map/driver.cxx new file mode 100644 index 0000000..ba9478c --- /dev/null +++ b/tests/build/prefix_map/driver.cxx @@ -0,0 +1,156 @@ +// file : tests/build/prefix_map/driver.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2015 Code Synthesis Tools CC +// license : MIT; see accompanying LICENSE file + +#include <string> +#include <cassert> +#include <iostream> + +#include <build/prefix_map> + +using namespace std; +using namespace build; + +int +main () +{ + typedef prefix_map<string, int> pm; + + { + const pm m ('.'); + + { + auto r (m.find ("")); + assert (r.first == r.second); + } + + { + auto r (m.find ("foo")); + assert (r.first == r.second); + } + } + + { + pm m {{{"foo", 1}}, '.'}; + + { + auto r (m.find ("")); + assert (r.first == r.second); + } + + { + auto r (m.find ("fo")); + assert (r.first == r.second); + } + + { + auto r (m.find ("fox")); + assert (r.first == r.second); + } + + { + auto r (m.find ("fooo")); + assert (r.first == r.second); + } + + { + auto r (m.find ("foo.bar")); + assert (r.first == r.second); + } + + { + auto r (m.find ("foo")); + assert (r.first != r.second && r.first->second == 1 && + ++r.first == r.second); + } + } + + { + pm m {{{"foo", 1}, {"bar", 2}}, '.'}; + + { + auto r (m.find ("")); + assert (r.first == r.second); + } + + { + auto r (m.find ("fo")); + assert (r.first == r.second); + } + + { + auto r (m.find ("fox")); + assert (r.first == r.second); + } + + { + auto r (m.find ("fooo")); + assert (r.first == r.second); + } + + { + auto r (m.find ("foo.bar")); + assert (r.first == r.second); + } + + { + auto r (m.find ("foo")); + assert (r.first != r.second && r.first->second == 1 && + ++r.first == r.second); + } + + { + auto r (m.find ("bar")); + assert (r.first != r.second && r.first->second == 2 && + ++r.first == r.second); + } + } + + { + pm m ( + {{"boo", 1}, + {"foo", 2}, {"fooa", 3}, {"foo.bar", 4}, {"foo.fox", 5}, + {"xoo", 5}}, + '.'); + + { + auto r (m.find ("")); + assert (r.first == r.second); + } + + { + auto r (m.find ("fo")); + assert (r.first == r.second); + } + + { + auto r (m.find ("fox")); + assert (r.first == r.second); + } + + { + auto r (m.find ("fooo")); + assert (r.first == r.second); + } + + { + auto r (m.find ("foo.bar")); + assert (r.first != r.second && r.first->second == 4 && + ++r.first == r.second); + } + + { + auto r (m.find ("foo.fox")); + assert (r.first != r.second && r.first->second == 5 && + ++r.first == r.second); + } + + { + auto r (m.find ("foo")); + assert (r.first != r.second && r.first->second == 2 && + ++r.first != r.second && r.first->second == 4 && + ++r.first != r.second && r.first->second == 5 && + ++r.first == r.second); + } + } +} |