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