ArmNN
 20.02
CsvReaderTest.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #include "CsvReader.hpp"
6 
7 #include <boost/algorithm/string.hpp>
8 #include <boost/test/unit_test.hpp>
9 
10 #include <iostream>
11 #include <string>
12 #include <boost/filesystem.hpp>
13 #include <boost/optional.hpp>
14 
15 using namespace armnnUtils;
16 
17 namespace {
18 struct TestHelper {
19 
20  TestHelper()
21  {
22  BOOST_TEST_MESSAGE("setup fixture");
23  }
24 
25  ~TestHelper()
26  {
27  BOOST_TEST_MESSAGE("teardown fixture");
28  TearDown();
29  }
30 
31  std::string CreateTempCsvFile()
32  {
33  boost::filesystem::path fileDir = boost::filesystem::temp_directory_path();
34  boost::filesystem::path p{fileDir / boost::filesystem::unique_path("%%%%-%%%%-%%%%.csv")};
35  try
36  {
37  boost::filesystem::ofstream ofs{p};
38  ofs << "airplane, bicycle , bird , \"m,o,n,k,e,y\"\n";
39  ofs << "banana, shoe, \"ice\"";
40  ofs.close();
41  } catch (std::exception &e)
42  {
43  std::cerr << "Unable to write to file at location [" << p.c_str() << "] : " << e.what() << std::endl;
44  BOOST_TEST(false);
45  }
46 
47  m_CsvFile = p;
48  return p.string();
49  }
50 
51  int CheckStringsMatch(CsvRow &row, unsigned int index, std::string expectedValue)
52  {
53  return row.values.at(index).compare(expectedValue);
54  }
55 
56  void TearDown()
57  {
58  RemoveCsvFile();
59  }
60 
61  void RemoveCsvFile()
62  {
63  if (m_CsvFile)
64  {
65  try
66  {
67  boost::filesystem::remove(*m_CsvFile);
68  }
69  catch (std::exception &e)
70  {
71  std::cerr << "Unable to delete file [" << *m_CsvFile << "] : " << e.what() << std::endl;
72  BOOST_TEST(false);
73  }
74  }
75  }
76 
77  boost::optional<boost::filesystem::path> m_CsvFile;
78 };
79 }
80 
81 BOOST_AUTO_TEST_SUITE(CsvReaderTest)
82 
83 BOOST_FIXTURE_TEST_CASE(TestParseVector, TestHelper)
84 {
85  CsvReader reader;
86  std::vector<std::string> csvStrings;
87  csvStrings.reserve(2);
88  csvStrings.push_back("airplane, automobile , bird , \"c,a,t\"");
89  csvStrings.push_back("banana, shoe, \"ice\"");
90 
91  std::vector<CsvRow> row = reader.ParseVector(csvStrings);
92  CsvRow row1 = row[0];
93  CsvRow row2 = row[1];
94 
95  BOOST_CHECK(row.size() == 2);
96 
97  BOOST_CHECK(row1.values.size() == 4);
98  BOOST_CHECK(CheckStringsMatch(row1, 0, "airplane") == 0);
99  BOOST_CHECK(CheckStringsMatch(row1, 1, "automobile") == 0);
100  BOOST_CHECK(CheckStringsMatch(row1, 2, "bird") == 0);
101  BOOST_CHECK(CheckStringsMatch(row1, 3, "c,a,t") == 0);
102 
103  BOOST_CHECK(row2.values.size() == 3);
104  BOOST_CHECK(CheckStringsMatch(row2, 0, "banana") == 0);
105  BOOST_CHECK(CheckStringsMatch(row2, 1, "shoe") == 0);
106  BOOST_CHECK(CheckStringsMatch(row2, 2, "ice") == 0);
107 }
108 
109 BOOST_FIXTURE_TEST_CASE(TestLoadingFileFromDisk, TestHelper)
110 {
111  CsvReader reader;
112  std::string theFilePath = TestHelper::CreateTempCsvFile();
113 
114  std::vector<CsvRow> row = reader.ParseFile(theFilePath);
115  CsvRow row1 = row[0];
116  CsvRow row2 = row[1];
117 
118  BOOST_CHECK(row.size() == 2);
119 
120  BOOST_CHECK(row1.values.size() == 4);
121  BOOST_CHECK(CheckStringsMatch(row1, 0, "airplane") == 0);
122  BOOST_CHECK(CheckStringsMatch(row1, 1, "bicycle") == 0);
123  BOOST_CHECK(CheckStringsMatch(row1, 2, "bird") == 0);
124  BOOST_CHECK(CheckStringsMatch(row1, 3, "m,o,n,k,e,y") == 0);
125 
126  BOOST_CHECK(row2.values.size() == 3);
127  BOOST_CHECK(CheckStringsMatch(row2, 0, "banana") == 0);
128  BOOST_CHECK(CheckStringsMatch(row2, 1, "shoe") == 0);
129  BOOST_CHECK(CheckStringsMatch(row2, 2, "ice") == 0);
130 }
131 
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
BOOST_FIXTURE_TEST_CASE(TestParseVector, TestHelper)
std::vector< std::string > values
Definition: CsvReader.hpp:15
BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::WaitingForAck)
static std::vector< CsvRow > ParseVector(const std::vector< std::string > &csvVector)
Definition: CsvReader.cpp:52
BOOST_AUTO_TEST_SUITE_END()
static std::vector< CsvRow > ParseFile(const std::string &csvFile)
Definition: CsvReader.cpp:32