1// -*- C++ -*- 2 3// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the terms 7// of the GNU General Public License as published by the Free Software 8// Foundation; either version 3, or (at your option) any later 9// version. 10 11// This library is distributed in the hope that it will be useful, but 12// WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14// General Public License for more details. 15 16// You should have received a copy of the GNU General Public License 17// along with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20 21// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. 22 23// Permission to use, copy, modify, sell, and distribute this software 24// is hereby granted without fee, provided that the above copyright 25// notice appears in all copies, and that both that copyright notice 26// and this permission notice appear in supporting documentation. None 27// of the above authors, nor IBM Haifa Research Laboratories, make any 28// representation about the suitability of this software for any 29// purpose. It is provided "as is" without express or implied 30// warranty. 31 32/** 33 * @file verified_cmd_line_input.cpp 34 * Contains definitions for tests - verified command line input. 35 */ 36 37#include <util/io/verified_cmd_line_input.hpp> 38#include <limits.h> 39#include <utility> 40#include <stdlib.h> 41#include <bits/functexcept.h> 42 43namespace __gnu_pbds 44{ 45 namespace test 46 { 47 void 48 verify_argc(size_t given, size_t required) 49 { 50 if (given != required) 51 __throw_illegal_input_error(); 52 } 53 54 void 55 verify_prob(double prob) 56 { 57 if (prob < 0 || prob > 1) 58 __throw_illegal_input_error(); 59 } 60 61 std::string 62 get_cmd_line_str(int argc, char* a_p_argv[], int argn) 63 { 64 if (argc <= argn) 65 __throw_illegal_input_error(); 66 const std::string ret(a_p_argv[argn]); 67 return ret; 68 } 69 70 double 71 get_cmd_line_prob(int argc, char* a_p_argv[], int argn) 72 { 73 if (argc <= argn) 74 __throw_illegal_input_error(); 75 const double ret = ::atof(a_p_argv[argn]); 76 verify_prob(ret); 77 return ret; 78 } 79 80 size_t 81 get_cmd_line_size(int argc, char* a_p_argv[], int argn) 82 { 83 if (argc <= argn) 84 __throw_illegal_input_error(); 85 const size_t ret = static_cast<size_t>(::atoi(a_p_argv[argn])); 86 return ret; 87 } 88 89 bool 90 get_cmd_line_bool(int argc, char* a_p_argv[], int argn) 91 { 92 if (argc <= argn) 93 __throw_illegal_input_error(); 94 95 const std::string opt(a_p_argv[argn]); 96 if (opt.size() != 1) 97 __throw_illegal_input_error(); 98 if (opt[0] == 't') 99 return true; 100 if (opt[0] == 'f') 101 return false; 102 __throw_illegal_input_error(); 103 return false; 104 } 105 } // namespace test 106} // namespace __gnu_pbds 107