From 83c28bc98a3cb439c3dbb3824f4ede4eb14798a3 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 24 Oct 2016 15:38:22 +0200 Subject: Rename tests/test/script/ to tests/test/script/runner/ --- tests/test/script/runner/driver.cxx | 76 +++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 tests/test/script/runner/driver.cxx (limited to 'tests/test/script/runner/driver.cxx') diff --git a/tests/test/script/runner/driver.cxx b/tests/test/script/runner/driver.cxx new file mode 100644 index 0000000..940a68c --- /dev/null +++ b/tests/test/script/runner/driver.cxx @@ -0,0 +1,76 @@ +// file : tests/test/script/runner/driver.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#include // numeric_limits +#include +#include +#include // endl, *bit +#include +#include + +using namespace std; + +int +main (int argc, char* argv[]) +{ + // Usage: driver [-i ] [-s ] (-o )* (-e )* + // + int status (256); + int ifd (3); + + cout.exceptions (ostream::failbit | ostream::badbit); + cerr.exceptions (ostream::failbit | ostream::badbit); + + for (int i (1); i < argc; ++i) + { + string o (argv[i++]); + assert (i < argc); + + string v (argv[i]); + + auto toi = [] (const string& s) -> int + { + try + { + return stoi (s); + } + catch (const exception&) + { + assert (false); + } + }; + + if (o == "-i") + { + assert (ifd == 3); // Make sure is not set yet. + + ifd = toi (v); + assert (ifd >= 0 && ifd < 3); + + if (ifd == 0) + cin.ignore (numeric_limits::max ()); + else + (ifd == 1 ? cout : cerr) << cin.rdbuf (); + } + else if (o == "-o") + { + cout << v << endl; + } + else if (o == "-e") + { + cerr << v << endl; + } + else if (o == "-s") + { + assert (status == 256); // Make sure is not set yet. + + status = toi (v); + assert (status >= 0 && status < 256); + } + else + assert (false); + } + + return status == 256 ? 0 : status; +} -- cgit v1.1