1 // -*- C++ -*- 2 3 // Copyright (C) 2005-2019 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 43 namespace __gnu_pbds 44 { 45 namespace test 46 { 47 void verify_argc(size_t given,size_t required)48 verify_argc(size_t given, size_t required) 49 { 50 if (given != required) 51 __throw_illegal_input_error(); 52 } 53 54 void verify_prob(double prob)55 verify_prob(double prob) 56 { 57 if (prob < 0 || prob > 1) 58 __throw_illegal_input_error(); 59 } 60 61 std::string get_cmd_line_str(int argc,char * a_p_argv[],int argn)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 get_cmd_line_prob(int argc,char * a_p_argv[],int argn)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 get_cmd_line_size(int argc,char * a_p_argv[],int argn)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 get_cmd_line_bool(int argc,char * a_p_argv[],int argn)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