#define BOOST_TEST_MODULE units tests #include #include namespace po = boost::program_options; #include "units.hpp" using namespace std; BOOST_AUTO_TEST_SUITE(units_tests); template dimension_t parse_unit(const std::string& s) { po::options_description desc("Allowed options"); desc.add_options() ("test_option", po::value(), "test option"); po::variables_map vm; po::store(po::command_line_parser(vector{"--test_option", s}).options(desc).run(), vm); return vm["test_option"].as(); } BOOST_AUTO_TEST_CASE(parse_length) { BOOST_CHECK_EQUAL(parse_unit("4").asInch(2), 8); BOOST_CHECK_EQUAL(parse_unit("25.4mm").asInch(200), 1); BOOST_CHECK_EQUAL(parse_unit("+50.8mm").asInch(200), 2); BOOST_CHECK_EQUAL(parse_unit(" 50.8mm").asInch(200), 2); BOOST_CHECK_EQUAL(parse_unit(" 50.8mm ").asInch(200), 2); BOOST_CHECK_EQUAL(parse_unit(" 50.8 mm ").asInch(2), 2); BOOST_CHECK_EQUAL(parse_unit(" \t50.8\tmm\t").asInch(2), 2); BOOST_CHECK_EQUAL(parse_unit("10000thou").asInch(0), 10); BOOST_CHECK_EQUAL(parse_unit("0.254 m").asInch(0), 10); Length length; std::stringstream ss; ss << parse_unit("4"); BOOST_CHECK_EQUAL(ss.str(), "4"); BOOST_CHECK_THROW(parse_unit("50.8mm/s"), po::validation_error); BOOST_CHECK_THROW(parse_unit("50.8seconds"), po::validation_error); BOOST_CHECK_THROW(parse_unit("50.8s"), po::validation_error); } BOOST_AUTO_TEST_CASE(parse_time) { BOOST_CHECK_EQUAL(parse_unit