1 /*
2 * Copyright (C) 1998-2018 ALPS Collaboration. See COPYRIGHT.TXT
3 * All rights reserved. Use is subject to license terms. See LICENSE.TXT
4 * For use in publications, see ACKNOWLEDGE.TXT
5 */
6
7 /** @file params_hdf5.cpp
8
9 @brief Tests saving/loading of parameters
10 */
11
12 #include "./params_test_support.hpp"
13
14 #include <iostream>
15
16 using alps::params;
17 namespace ah5=alps::hdf5;
18
19 namespace test_data {
20 static const char inifile_content[]=
21 "my_bool=true\n"
22 "my_int=1234\n"
23 "my_string=ABC\n"
24 "my_double=12.75\n"
25 ;
26
27 }
28
29 class ParamsTest : public ::testing::Test {
30 protected:
31 ParamsAndFile params_and_file_;
32 params& par_;
33 alps::testing::unique_file file_;
34 public:
ParamsTest()35 ParamsTest() : params_and_file_(::test_data::inifile_content),
36 par_(*params_and_file_.get_params_ptr()),
37 file_("params_hdf5_test.h5.", alps::testing::unique_file::REMOVE_AFTER/*KEEP_AFTER*/)
38
39 { }
40 };
41
TEST_F(ParamsTest,saveLoad)42 TEST_F(ParamsTest, saveLoad) {
43 arg_holder args;
44 args.add("some=something");
45 params p_other(args.argc(), args.argv());
46 p_other["another_int"]=9999;
47
48 par_.define<int>("my_int", "Integer param");
49 par_.define<double>("my_double", 0.00, "Double param");
50
51 {
52 ah5::archive ar(file_.name(), "w");
53 ar["params"] << par_;
54 }
55
56 {
57 ah5::archive ar(file_.name(), "r");
58 ar["params"] >> p_other;
59 }
60
61 EXPECT_FALSE(p_other.exists("another_int"));
62 EXPECT_EQ(par_, p_other);
63
64 EXPECT_TRUE(p_other.define<std::string>("my_string", "", "String param").ok());
65 EXPECT_EQ("ABC", p_other["my_string"].as<std::string>());
66
67 EXPECT_FALSE(p_other.is_restored());
68 EXPECT_ANY_THROW(p_other.get_archive_name());
69
70 EXPECT_EQ(par_.get_argv0(), p_other.get_argv0());
71 EXPECT_EQ(par_.get_ini_name_count(), p_other.get_ini_name_count());
72 for (int i=0; i<par_.get_ini_name_count(); ++i) {
73 EXPECT_EQ(par_.get_ini_name(i), p_other.get_ini_name(i));
74 }
75 }
76
TEST_F(ParamsTest,h5Ctor)77 TEST_F(ParamsTest, h5Ctor) {
78 {
79 ah5::archive ar(file_.name(), "w");
80 ar["/parameters"] << par_;
81 }
82 arg_holder args;
83 args.add(file_.name());
84
85 params p_new(args.argc(), args.argv());
86
87 EXPECT_EQ(par_, p_new);
88
89 EXPECT_FALSE(par_.is_restored());
90 EXPECT_ANY_THROW(par_.get_archive_name());
91
92 EXPECT_TRUE(p_new.is_restored());
93 EXPECT_EQ(file_.name(), p_new.get_archive_name());
94 }
95
TEST_F(ParamsTest,h5CtorExtraArgs)96 TEST_F(ParamsTest, h5CtorExtraArgs) {
97 {
98 ah5::archive ar(file_.name(), "w");
99 ar["/parameters"] << par_;
100 }
101 arg_holder args;
102 args.add(file_.name()).add("some=something");
103
104 EXPECT_ANY_THROW(params p_new(args.argc(), args.argv()));
105 }
106
TEST_F(ParamsTest,h5CtorNotFirstArgument)107 TEST_F(ParamsTest, h5CtorNotFirstArgument) {
108 {
109 ah5::archive ar(file_.name(), "w");
110 ar["/parameters"] << par_;
111 }
112 arg_holder args;
113 args.add("some=something").add(file_.name());
114
115 EXPECT_ANY_THROW(params p_new(args.argc(), args.argv()));
116 }
117
118