2#include <catch2/catch_approx.hpp>
3#include <catch2/catch_test_macros.hpp>
4#include <catch2/matchers/catch_matchers_string.hpp>
7#include "Framework/Configure/Python.h"
12using Catch::Matchers::ContainsSubstring;
34 CHECK(name ==
"test_instance");
51 CHECK(parameters.get<
int>(
"test_int") == 9);
52 CHECK(parameters.get<
double>(
"test_double") == Approx(7.7));
53 CHECK(parameters.get<std::string>(
"test_string") ==
"Yay!");
57 CHECK(test_dict.get<
int>(
"one") == 1);
58 CHECK(test_dict.get<
double>(
"two") == 2.0);
61 std::vector<int> int_vect{1, 2, 3};
62 auto test_int_vec{parameters.get<std::vector<int>>(
"test_int_vec")};
63 REQUIRE(test_int_vec.size() == int_vect.size());
64 for (std::size_t i{0}; i < test_int_vec.size(); i++)
65 CHECK(test_int_vec.at(i) == int_vect.at(i));
68 std::vector<double> double_vec{0.1, 0.2, 0.3};
70 parameters.get<std::vector<double>>(
"test_double_vec")};
71 REQUIRE(test_double_vec.size() == double_vec.size());
72 for (std::size_t i{0}; i < test_double_vec.size(); i++)
73 CHECK(test_double_vec.at(i) == double_vec.at(i));
76 std::vector<std::string> string_vec{
"first",
"second",
"third"};
78 parameters.get<std::vector<std::string>>(
"test_string_vec")};
79 REQUIRE(test_string_vec.size() == string_vec.size());
80 for (std::size_t i{0}; i < test_string_vec.size(); i++)
81 CHECK(test_string_vec.at(i) == string_vec.at(i));
84 std::vector<std::vector<int>> twod_vec{
85 {11, 12, 13}, {21, 22}, {31, 32, 33, 34}};
87 parameters.get<std::vector<std::vector<int>>>(
"test_2dlist")};
88 REQUIRE(test_2d_vec.size() == twod_vec.size());
89 for (std::size_t i{0}; i < twod_vec.size(); i++) {
90 REQUIRE(test_2d_vec.at(i).size() == twod_vec.at(i).size());
91 for (std::size_t j{0}; j < twod_vec.at(i).size(); j++) {
92 CHECK(test_2d_vec.at(i).at(j) == twod_vec.at(i).at(j));
115TEST_CASE(
"Configure Python Test",
"[Framework][functionality]") {
116 const std::string config_file_name{
"config_python_test_config.py"};
125 SECTION(
"No arguments to python script") {
127 "ldmxcfg.Process.last_process", config_file_name, args, 0)};
128 p = std::make_unique<framework::Process>(config);
130 CHECK(p->getPassName() ==
"test");
134 std::ifstream in_file;
135 std::ofstream out_file;
137 in_file.open(config_file_name.c_str(), std::ios::in | std::ios::binary);
139 const std::string config_file_name_arg{
140 "/tmp/config_python_test_config_arg.py"};
141 out_file.open(config_file_name_arg, std::ios::out | std::ios::binary);
142 out_file << in_file.rdbuf();
143 out_file <<
"import sys" << std::endl;
144 out_file <<
"p.log_frequency = int(sys.argv[1])" << std::endl;
151 auto correct_log_freq{9000};
152 SECTION(
"Single argument to python script") {
153 args[0] = (
char*)
"9000";
155 config_file_name_arg, args, 1)};
156 p = std::make_unique<framework::Process>(config);
157 CHECK(p->getLogFrequency() == correct_log_freq);
Base classes for all user event processing components to extend.
#define DECLARE_PRODUCER(CLASS)
Macro which allows the framework to construct a producer given its name during configuration.
Class which represents the process under execution.
Implements an event buffer system for storing event data.
Class which represents the process under execution.
Base class for a module which produces a data product.
virtual void process(Event &event) final
Processing an event for a Producer is calling produce.
Class encapsulating parameters for configuring a processor.
Defines a test Producer to test the passing of configuration variables.
virtual void produce(framework::Event &) override
Process the event and put new data products into it.
TestConfig(const std::string &name, framework::Process &process)
Constructor.
void configure(framework::config::Parameters ¶meters) final override
Configure function.
Parameters run(const std::string &root_object, const std::string &pythonScript, char *args[], int nargs)
run the python script and extract the parameters
All classes in the ldmx-sw project use this namespace.
std::unique_ptr< Process > ProcessHandle
A handle to the current process Used to pass a process from ConfigurePython to fire....