diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-01-27 12:27:54 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-01-27 12:27:54 +0200 |
commit | ae02c68df6f26ff24b008ca047ae7750eeecedac (patch) | |
tree | 3aa59815cfae218923ae3f8b5f8f2f3e611ee3ee /tests/triplet | |
parent | 59fc5d5cc5341e0505216c17405af995116ebb3b (diff) |
Add support for parsing cpu-vendor-os target triplets
Diffstat (limited to 'tests/triplet')
-rw-r--r-- | tests/triplet/buildfile | 7 | ||||
-rw-r--r-- | tests/triplet/driver.cxx | 154 |
2 files changed, 161 insertions, 0 deletions
diff --git a/tests/triplet/buildfile b/tests/triplet/buildfile new file mode 100644 index 0000000..237209e --- /dev/null +++ b/tests/triplet/buildfile @@ -0,0 +1,7 @@ +# file : tests/triplet/buildfile +# copyright : Copyright (c) 2014-2016 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +exe{driver}: cxx{driver} ../../butl/lib{butl} + +include ../../butl/ diff --git a/tests/triplet/driver.cxx b/tests/triplet/driver.cxx new file mode 100644 index 0000000..9d51fed --- /dev/null +++ b/tests/triplet/driver.cxx @@ -0,0 +1,154 @@ +// file : tests/triplet/driver.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#include <cassert> +#include <iostream> +#include <stdexcept> // invalid_argument + +#include <butl/triplet> + +using namespace std; +using namespace butl; + +static bool +fail (const char*); + +static bool +test (const char*, + const char* canon, + const char* cpu, + const char* vendor, + const char* system, + const char* version); + +int +main () +{ + assert (fail ("")); + assert (fail ("mingw32")); + assert (fail ("-")); + assert (fail ("arm-")); + assert (fail ("-mingw32")); + assert (fail ("a-b-c-d-e")); + assert (fail ("arm-pc--")); + assert (fail ("arm-pc-linux-")); + assert (fail ("arm-pc--gnu")); + + assert (test ("i686-elf", + "i686-elf", + "i686", "", "elf", "")); + + assert (test ("arm-eabi", + "arm-eabi", + "arm", "", "eabi", "")); + + assert (test ("arm-none-eabi", + "arm-eabi", + "arm", "", "eabi", "")); + + assert (test ("arm-none-linux-gnueabi", + "arm-linux-gnueabi", + "arm", "", "linux-gnueabi", "")); + + assert (test ("arm-softfloat-linux-gnu", + "arm-softfloat-linux-gnu", + "arm", "softfloat", "linux-gnu", "")); + + assert (test ("i686-pc-mingw32", + "i686-mingw32", + "i686", "", "mingw32", "")); + + assert (test ("i686-w64-mingw32", + "i686-w64-mingw32", + "i686", "w64", "mingw32", "")); + + assert (test ("i686-lfs-linux-gnu", + "i686-lfs-linux-gnu", + "i686", "lfs", "linux-gnu", "")); + + assert (test ("x86_64-unknown-linux-gnu", + "x86_64-linux-gnu", + "x86_64", "", "linux-gnu", "")); + + assert (test ("x86_64-linux-gnux32", + "x86_64-linux-gnux32", + "x86_64", "", "linux-gnux32", "")); + + // Removal of none-. + // + assert (test ("arm-none", + "arm-none", + "arm", "", "none", "")); + + assert (test ("arm-unknown-none-eabi", + "arm-eabi", + "arm", "", "eabi", "")); + + // Version extraction. + // + assert (test ("x86_64-apple-darwin14.5.0", + "x86_64-apple-darwin14.5.0", + "x86_64", "apple", "darwin", "14.5.0")); + + assert (test ("x86_64-unknown-freebsd10.2", + "x86_64-freebsd10.2", + "x86_64", "", "freebsd", "10.2")); + + assert (test ("x86_64-pc-openbsd5.6", + "x86_64-openbsd5.6", + "x86_64", "", "openbsd", "5.6")); + + assert (test ("sparc-sun-solaris2.9", + "sparc-sun-solaris2.9", + "sparc", "sun", "solaris", "2.9")); +} + +static bool +test (const char* s, + const char* canon, + const char* cpu, + const char* vendor, + const char* system, + const char* version) +{ + string c; + triplet t (s, c); + + auto cmp = [] (const string& a, const char* e, const char* n) -> bool + { + if (a != e) + { + cerr << n << " actual: " << a << endl + << n << " expect: " << e << endl; + + return false; + } + + return true; + }; + + return + cmp (c, canon, "canonical") && + cmp (t.cpu, cpu, "cpu") && + cmp (t.vendor, vendor, "vendor") && + cmp (t.system, system, "system") && + cmp (t.version, version, "version"); +} + +static bool +fail (const char* s) +{ + try + { + triplet t (s); + cerr << "nofail: " << s << endl; + return false; + } + catch (invalid_argument& e) + { + //cerr << e.what () << endl; + } + + return true; +} |