1 /*=========================================================================
2 
3   Program:   Visualization Toolkit
4   Module:    TestBoostSplitTableField.cxx
5 
6   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7   All rights reserved.
8   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10      This software is distributed WITHOUT ANY WARRANTY; without even
11      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12      PURPOSE.  See the above copyright notice for more information.
13 
14 =========================================================================*/
15 
16 #include "vtkBoostSplitTableField.h"
17 #include "vtkDelimitedTextReader.h"
18 #include "vtkSmartPointer.h"
19 #include "vtkStdString.h"
20 #include "vtkTable.h"
21 #include "vtkTestUtilities.h"
22 #include "vtkVariant.h"
23 
24 template<typename value_t>
TestValue(const value_t & Value,const value_t & ExpectedValue,const vtkStdString & ValueDescription,int & ErrorCount)25 void TestValue(const value_t& Value, const value_t& ExpectedValue, const vtkStdString& ValueDescription, int& ErrorCount)
26 {
27   if(Value == ExpectedValue)
28     return;
29 
30   cerr << ValueDescription << " is [" << Value << "] - expected [" << ExpectedValue << "]" << endl;
31 
32   ++ErrorCount;
33 }
34 
TestBoostSplitTableField(int argc,char * argv[])35 int TestBoostSplitTableField(int argc, char* argv[])
36 {
37   char* file = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/Infovis/publications.csv");
38 
39   cerr << "file: " << file << endl;
40 
41   vtkSmartPointer<vtkDelimitedTextReader> reader = vtkSmartPointer<vtkDelimitedTextReader>::New();
42   reader->SetFileName(file);
43   delete[] file;
44   reader->SetHaveHeaders(true);
45 
46   vtkSmartPointer<vtkBoostSplitTableField> split = vtkSmartPointer<vtkBoostSplitTableField>::New();
47   split->AddInputConnection(reader->GetOutputPort());
48   split->AddField("Author", ";");
49 
50   split->Update();
51   vtkTable* const table = split->GetOutput();
52 
53   int error_count = 0;
54 
55   // Test the size of the output table ...
56   TestValue(table->GetNumberOfColumns(), vtkIdType(5), "Column count", error_count);
57   TestValue(table->GetNumberOfRows(), vtkIdType(9), "Row count", error_count);
58 
59   // Test a sampling of the table columns ...
60   TestValue(vtkStdString(table->GetColumnName(0)), vtkStdString("PubID"), "Column 0", error_count);
61   TestValue(vtkStdString(table->GetColumnName(1)), vtkStdString("Author"), "Column 1", error_count);
62   TestValue(vtkStdString(table->GetColumnName(2)), vtkStdString("Journal"), "Column 2", error_count);
63   TestValue(vtkStdString(table->GetColumnName(3)), vtkStdString("Categories"), "Column 3", error_count);
64   TestValue(vtkStdString(table->GetColumnName(4)), vtkStdString("Accuracy"), "Column 4", error_count);
65 
66   // Test a sampling of the table values ...
67   TestValue(table->GetValue(0, 0).ToString(), vtkStdString("P001"), "Value 0, 0", error_count);
68   TestValue(table->GetValue(0, 1).ToString(), vtkStdString("Biff"), "Value 0, 1", error_count);
69   TestValue(table->GetValue(0, 2).ToString(), vtkStdString("American Journal of Spacecraft Music"), "Value 0, 2", error_count);
70 
71   TestValue(table->GetValue(7, 0).ToString(), vtkStdString("P008"), "value 7, 0", error_count);
72   TestValue(table->GetValue(7, 1).ToString(), vtkStdString("Biff"), "value 7, 1", error_count);
73   TestValue(table->GetValue(7, 2).ToString(), vtkStdString("American Crafts and Holistic Medicine Quarterly"), "value 7, 2", error_count);
74 
75   TestValue(table->GetValue(8, 0).ToString(), vtkStdString("P008"), "value 8, 0", error_count);
76   TestValue(table->GetValue(8, 1).ToString(), vtkStdString("Bob"), "value 8, 1", error_count);
77   TestValue(table->GetValue(8, 2).ToString(), vtkStdString("American Crafts and Holistic Medicine Quarterly"), "value 8, 2", error_count);
78 
79   return error_count;
80 }
81