Release 18.08
[platform/upstream/armnn.git] / src / armnn / test / CsvReaderTest.cpp
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // See LICENSE file in the project root for full license information.
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
14 using namespace armnnUtils;
15
16 struct TestHelper {
17
18     TestHelper()
19     {
20         BOOST_TEST_MESSAGE("setup fixture");
21     }
22
23     ~TestHelper()
24     {
25         BOOST_TEST_MESSAGE("teardown fixture");
26         TearDown();
27     }
28
29     std::string CreateTempCsvFile()
30     {
31         std::string fileDir = boost::filesystem::temp_directory_path().c_str();
32         boost::filesystem::path p{fileDir + "/sampleFile.csv"};
33         try
34         {
35             boost::filesystem::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         return fileDir + "/sampleFile.csv";
45     }
46
47     int CheckStringsMatch(CsvRow &row, unsigned int index, std::string expectedValue)
48     {
49         return row.values.at(index).compare(expectedValue);
50     }
51
52     void TearDown()
53     {
54         RemoveCsvFile();
55     }
56
57     void RemoveCsvFile()
58     {
59         std::string fileDir = boost::filesystem::temp_directory_path().c_str();
60         std::string filePath = fileDir + "/sampleFile.csv";
61         try
62         {
63             boost::filesystem::remove(filePath);
64         }
65         catch (std::exception &e)
66         {
67             std::cerr << "Unable to delete file [" << filePath << "] : " << e.what() << std::endl;
68             BOOST_TEST(false);
69         }
70     }
71 };
72
73 BOOST_AUTO_TEST_SUITE(CsvReaderTest)
74
75 BOOST_FIXTURE_TEST_CASE(TestParseVector, TestHelper)
76 {
77     CsvReader reader;
78     std::vector<std::string> csvStrings;
79     csvStrings.reserve(2);
80     csvStrings.push_back("airplane, automobile , bird , \"c,a,t\"");
81     csvStrings.push_back("banana, shoe, \"ice\"");
82
83     std::vector<CsvRow> row = reader.ParseVector(csvStrings);
84     CsvRow row1 = row[0];
85     CsvRow row2 = row[1];
86
87     BOOST_CHECK(row.size() == 2);
88
89     BOOST_CHECK(row1.values.size() == 4);
90     BOOST_CHECK(CheckStringsMatch(row1, 0, "airplane") == 0);
91     BOOST_CHECK(CheckStringsMatch(row1, 1, "automobile") == 0);
92     BOOST_CHECK(CheckStringsMatch(row1, 2, "bird") == 0);
93     BOOST_CHECK(CheckStringsMatch(row1, 3, "c,a,t") == 0);
94
95     BOOST_CHECK(row2.values.size() == 3);
96     BOOST_CHECK(CheckStringsMatch(row2, 0, "banana") == 0);
97     BOOST_CHECK(CheckStringsMatch(row2, 1, "shoe") == 0);
98     BOOST_CHECK(CheckStringsMatch(row2, 2, "ice") == 0);
99 }
100
101 BOOST_FIXTURE_TEST_CASE(TestLoadingFileFromDisk, TestHelper)
102 {
103     CsvReader reader;
104     std::string theFilePath = TestHelper::CreateTempCsvFile();
105
106     std::vector<CsvRow> row = reader.ParseFile(theFilePath);
107     CsvRow row1 = row[0];
108     CsvRow row2 = row[1];
109
110     BOOST_CHECK(row.size() == 2);
111
112     BOOST_CHECK(row1.values.size() == 4);
113     BOOST_CHECK(CheckStringsMatch(row1, 0, "airplane") == 0);
114     BOOST_CHECK(CheckStringsMatch(row1, 1, "bicycle") == 0);
115     BOOST_CHECK(CheckStringsMatch(row1, 2, "bird") == 0);
116     BOOST_CHECK(CheckStringsMatch(row1, 3, "m,o,n,k,e,y") == 0);
117
118     BOOST_CHECK(row2.values.size() == 3);
119     BOOST_CHECK(CheckStringsMatch(row2, 0, "banana") == 0);
120     BOOST_CHECK(CheckStringsMatch(row2, 1, "shoe") == 0);
121     BOOST_CHECK(CheckStringsMatch(row2, 2, "ice") == 0);
122 }
123
124 BOOST_AUTO_TEST_SUITE_END()