test/getvector.cc

Code
Comments
Other
Rev Date Author Line
3639 26 Apr 17 peter 1 // $Id$
3639 26 Apr 17 peter 2
3639 26 Apr 17 peter 3 /*
3930 08 Jul 20 peter 4   Copyright (C) 2017, 2020 Peter Johansson
3639 26 Apr 17 peter 5
3639 26 Apr 17 peter 6   This file is part of the yat library, http://dev.thep.lu.se/yat
3639 26 Apr 17 peter 7
3639 26 Apr 17 peter 8   The yat library is free software; you can redistribute it and/or
3639 26 Apr 17 peter 9   modify it under the terms of the GNU General Public License as
3639 26 Apr 17 peter 10   published by the Free Software Foundation; either version 3 of the
3639 26 Apr 17 peter 11   License, or (at your option) any later version.
3639 26 Apr 17 peter 12
3639 26 Apr 17 peter 13   The yat library is distributed in the hope that it will be useful,
3639 26 Apr 17 peter 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
3639 26 Apr 17 peter 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3639 26 Apr 17 peter 16   General Public License for more details.
3639 26 Apr 17 peter 17
3639 26 Apr 17 peter 18   You should have received a copy of the GNU General Public License
3639 26 Apr 17 peter 19   along with yat. If not, see <http://www.gnu.org/licenses/>.
3639 26 Apr 17 peter 20 */
3639 26 Apr 17 peter 21
3639 26 Apr 17 peter 22 #include <config.h>
3639 26 Apr 17 peter 23
3639 26 Apr 17 peter 24 #include "Suite.h"
3639 26 Apr 17 peter 25
3639 26 Apr 17 peter 26 #include "yat/utility/getvector.h"
3639 26 Apr 17 peter 27
3639 26 Apr 17 peter 28 #include <string>
3639 26 Apr 17 peter 29 #include <sstream>
3639 26 Apr 17 peter 30 #include <vector>
3639 26 Apr 17 peter 31
3639 26 Apr 17 peter 32 using namespace theplu::yat;
3639 26 Apr 17 peter 33
3639 26 Apr 17 peter 34 int main(int argc,char* argv[])
3639 26 Apr 17 peter 35 {
3639 26 Apr 17 peter 36   test::Suite suite(argc, argv);
3639 26 Apr 17 peter 37
3639 26 Apr 17 peter 38   std::istringstream ss("Hello World!\n$2\n\n");
3639 26 Apr 17 peter 39   std::vector<std::string> vec;
3639 26 Apr 17 peter 40   using utility::getvector;
3639 26 Apr 17 peter 41   getvector(ss, vec, ' ', '\n');
3639 26 Apr 17 peter 42   if (vec.size()!=2) {
3639 26 Apr 17 peter 43     suite.err() << "expected two word; found " << vec.size() << "\n";
3639 26 Apr 17 peter 44     suite.add(false);
3639 26 Apr 17 peter 45   }
3639 26 Apr 17 peter 46   getvector(ss, vec, ' ', '\n');
3639 26 Apr 17 peter 47   if (vec.size()!=1) {
3639 26 Apr 17 peter 48     suite.err() << "expected one word; found " << vec.size() << "\n";
3639 26 Apr 17 peter 49     suite.add(false);
3639 26 Apr 17 peter 50   }
3639 26 Apr 17 peter 51   getvector(ss, vec, ' ', '\n');
3639 26 Apr 17 peter 52   if (vec.size()!=1) {
3639 26 Apr 17 peter 53     suite.err() << "expected one word; found " << vec.size() << "\n";
3639 26 Apr 17 peter 54     suite.add(false);
3639 26 Apr 17 peter 55   }
3639 26 Apr 17 peter 56
3639 26 Apr 17 peter 57   std::vector<double> x;
3639 26 Apr 17 peter 58   std::istringstream ss2("3.14 2.71\n");
3639 26 Apr 17 peter 59   if (getvector(ss2, x, " \t")) {
3639 26 Apr 17 peter 60     if (x.size()==2) {
3639 26 Apr 17 peter 61       suite.out() << "x[0]: " << x[0] << "\n";
3639 26 Apr 17 peter 62       if (x[0]!=3.14)
3639 26 Apr 17 peter 63         suite.add(false);
3639 26 Apr 17 peter 64     }
3639 26 Apr 17 peter 65     else {
3639 26 Apr 17 peter 66       suite.add(false);
3639 26 Apr 17 peter 67       suite.err() << "error: incorrect size\n";
3639 26 Apr 17 peter 68     }
3639 26 Apr 17 peter 69   }
3639 26 Apr 17 peter 70   else {
3639 26 Apr 17 peter 71     suite.add(false);
3639 26 Apr 17 peter 72     suite.err() << "getvector failed\n";
3639 26 Apr 17 peter 73   }
3930 08 Jul 20 peter 74
3930 08 Jul 20 peter 75   // test ticket #947
3930 08 Jul 20 peter 76   {
3930 08 Jul 20 peter 77     std::istringstream ss3("a b\nc d\n");
3930 08 Jul 20 peter 78     std::vector<std::string> vec;
3930 08 Jul 20 peter 79     while (getvector(ss3, vec, ' ')) {
3930 08 Jul 20 peter 80       if (vec.size() != 2) {
3930 08 Jul 20 peter 81         suite.add(false);
3930 08 Jul 20 peter 82         suite.err() << "error: wrong vector size:\n";
3930 08 Jul 20 peter 83         for (size_t i=0; i<vec.size(); ++i)
3930 08 Jul 20 peter 84           suite.err() << i << " " << vec[i] << "\n";
3930 08 Jul 20 peter 85       }
3930 08 Jul 20 peter 86     }
3930 08 Jul 20 peter 87   }
3930 08 Jul 20 peter 88   {
3930 08 Jul 20 peter 89     std::istringstream ss3("0 1\n2 3\n");
3930 08 Jul 20 peter 90     std::vector<int> vec;
3930 08 Jul 20 peter 91     while (getvector(ss3, vec, ' ')) {
3930 08 Jul 20 peter 92       if (vec.size() != 2) {
3930 08 Jul 20 peter 93         suite.add(false);
3930 08 Jul 20 peter 94         suite.err() << "error: wrong vector size:\n";
3930 08 Jul 20 peter 95         for (size_t i=0; i<vec.size(); ++i)
3930 08 Jul 20 peter 96           suite.err() << i << " " << vec[i] << "\n";
3930 08 Jul 20 peter 97       }
3930 08 Jul 20 peter 98     }
3930 08 Jul 20 peter 99   }
3930 08 Jul 20 peter 100
3639 26 Apr 17 peter 101   return suite.return_value();
3639 26 Apr 17 peter 102 }