1
1
#include < complex>
2
+ #include < filesystem>
2
3
#include < iostream>
4
+ #include < stdexcept>
3
5
#include < tuple>
4
6
#include < type_traits>
5
7
@@ -31,9 +33,10 @@ class TableReader {
31
33
PARQUET_ASSIGN_OR_THROW (infile_, arrow::io::ReadableFile::Open (file_path));
32
34
parquet::StreamReader stream{parquet::ParquetFileReader::Open (infile_)};
33
35
stream_ = std::make_unique<parquet::StreamReader>(std::move (stream));
36
+ file_path_ = std::move (file_path);
34
37
}
35
38
36
- T operator () () {
39
+ T next () {
37
40
T row;
38
41
fill_row (row);
39
42
return row;
@@ -58,59 +61,61 @@ class TableReader {
58
61
V real;
59
62
V imag;
60
63
*stream_ >> real >> imag;
61
- element = T (real, imag);
64
+ element = U (real, imag);
62
65
} else {
63
66
*stream_ >> element;
64
67
}
65
68
}
66
69
67
70
std::shared_ptr<arrow::io::ReadableFile> infile_;
68
71
std::unique_ptr<parquet::StreamReader> stream_;
72
+ std::string file_path_;
69
73
};
70
74
71
75
template <typename T1, typename T2, typename T3>
72
- class XsfTestCaseGenerator final
73
- : public Catch::Generators::IGenerator<std::tuple<T1, T2, T3>> {
76
+ class XsfTestCaseGenerator final : public Catch::Generators::IGenerator<std::tuple<T1, T2, T3>> {
74
77
public:
75
78
XsfTestCaseGenerator (
76
- TableReader<T1> & input_reader, TableReader<T2> & output_reader,
77
- TableReader<T3> & tol_reader
79
+ std::unique_ptr< TableReader<T1>> input_reader, std::unique_ptr< TableReader<T2>> output_reader,
80
+ std::unique_ptr< TableReader<T3>> tol_reader
78
81
)
79
- : input_reader_(input_reader), output_reader_(output_reader), tol_reader_(tol_reader) {}
82
+ : input_reader_(std::move(input_reader)), output_reader_(std::move(output_reader)),
83
+ tol_reader_ (std::move(tol_reader)) {
84
+ if (!next ()) {
85
+ throw std::runtime_error (" XsfTestCaseGenerator received an empty table\n " );
86
+ }
87
+ }
80
88
81
89
std::tuple<T1, T2, T3> const &get () const override { return current_case_; }
82
90
83
91
bool next () override {
84
- if (input_reader_. eof () || output_reader_. eof () || tol_reader_. eof ()) {
92
+ if (input_reader_-> eof () || output_reader_-> eof () || tol_reader_-> eof ()) {
85
93
return false ;
86
94
}
87
-
88
- auto inputs = input_reader_ ();
89
- auto outputs = output_reader_ ();
90
- auto tolerance = tol_reader_ ();
91
-
92
- current_case_ = std::make_tuple (inputs, outputs, tolerance);
95
+ current_case_ = std::make_tuple (input_reader_->next (), output_reader_->next (), tol_reader_->next ());
93
96
return true ;
94
97
}
95
98
96
99
private:
97
- TableReader<T1> &input_reader_;
98
- TableReader<T2> &output_reader_;
99
- TableReader<T3> &tol_reader_;
100
-
100
+ std::unique_ptr<TableReader<T1>> input_reader_;
101
+ std::unique_ptr<TableReader<T2>> output_reader_;
102
+ std::unique_ptr<TableReader<T3>> tol_reader_;
101
103
std::tuple<T1, T2, T3> current_case_;
102
104
};
103
105
104
-
105
106
template <typename T1, typename T2, typename T3>
106
- Catch::Generators::GeneratorWrapper<std::tuple<T1, T2, T3>>
107
- xsf_test_cases (const std::string &input_path, std::string &output_path, std::string &tol_path) {
108
- TableReader<T1> input_reader (input_path);
109
- TableReader<T2> output_reader (output_path);
110
- TableReader<T3> tol_reader (tol_path);
107
+ Catch::Generators::GeneratorWrapper<std::tuple<T1, T2, T3>> xsf_test_cases (
108
+ const std::filesystem::path &input_path, const std::filesystem::path &output_path,
109
+ const std::filesystem::path &tol_path
110
+ ) {
111
+ auto input_reader = std::make_unique<TableReader<T1>>(input_path.string ());
112
+ auto output_reader = std::make_unique<TableReader<T2>>(output_path.string ());
113
+ auto tol_reader = std::make_unique<TableReader<T3>>(tol_path.string ());
111
114
112
115
return Catch::Generators::GeneratorWrapper<std::tuple<T1, T2, T3>>(
113
- Catch::Detail::make_unique<XsfTestCaseGenerator>(input_reader, output_reader, tol_reader)
116
+ Catch::Detail::make_unique<XsfTestCaseGenerator<T1, T2, T3>>(
117
+ std::move (input_reader), std::move (output_reader), std::move (tol_reader)
118
+ )
114
119
);
115
120
}
116
121
0 commit comments