File: tparsetreader.cpp

package info (click to toggle)
wsclean 3.6-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 16,296 kB
  • sloc: cpp: 129,246; python: 22,066; sh: 360; ansic: 230; makefile: 185
file content (92 lines) | stat: -rw-r--r-- 3,477 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <boost/test/unit_test.hpp>

#include "../../io/parsetreader.h"

namespace wsclean {

BOOST_AUTO_TEST_SUITE(parsetreader)

BOOST_AUTO_TEST_CASE(normal_parset) {
  const char* testparset =
      "# This is a test parset\n"
      "	aterms = [ tec, rm, amplitude ] # of phase, diagonal, fulljones, beam, "
      "...\n"
      "	tec.type = tec\n"
      "	tec.images = [ tecimages.fits ]\n"
      "	rm.type = rm\n"
      "	rm.images = [ rmimages.fits ]\n"
      "	amplitude.type = amplitude\n"
      "	rm.images = [ amplitudesXX.fits amplitudesYY.fits ]\n"
      "# Comments are allowed\n"
      "	beam.differential = true\n"
      "	beam.update_interval = 12.0 # in seconds\n";

  std::istringstream stream(testparset);
  ParsetReader reader(stream);

  BOOST_CHECK_EQUAL(reader.GetStringList("aterms").size(), 3u);
  BOOST_CHECK_EQUAL(reader.GetStringList("aterms")[0], "tec");
  BOOST_CHECK_EQUAL(reader.GetStringList("aterms")[1], "rm");
  BOOST_CHECK_EQUAL(reader.GetStringList("aterms")[2], "amplitude");
  BOOST_CHECK_EQUAL(reader.GetString("tec.type"), "tec");
  BOOST_CHECK_EQUAL(reader.GetStringList("tec.images").size(), 1u);
  BOOST_CHECK_EQUAL(reader.GetStringList("tec.images")[0], "tecimages.fits");
  BOOST_CHECK_EQUAL(reader.GetString("rm.type"), "rm");
  BOOST_CHECK_EQUAL(reader.GetString("amplitude.type"), "amplitude");
  BOOST_CHECK_EQUAL(reader.GetString("beam.differential"), "true");
  BOOST_CHECK_EQUAL(reader.GetBool("beam.differential"), true);
  BOOST_CHECK_EQUAL(reader.GetDouble("beam.update_interval"), 12.0);

  // Or values
  BOOST_CHECK_EQUAL(reader.GetBoolOr("beam.differential", false), true);
  BOOST_CHECK_EQUAL(reader.GetBoolOr("notexisting", true), true);
  BOOST_CHECK_EQUAL(reader.GetBoolOr("notexisting", false), false);

  BOOST_CHECK_EQUAL(reader.GetDoubleOr("beam.update_interval", 60.0), 12.0);
  BOOST_CHECK_EQUAL(reader.GetDoubleOr("notexisting", 37.3), 37.3);

  BOOST_CHECK_EQUAL(reader.GetStringOr("rm.type", "-"), "rm");
  BOOST_CHECK_EQUAL(reader.GetStringOr("notexisting", "!"), "!");
}

BOOST_AUTO_TEST_CASE(key_not_found) {
  const char* testparset =
      "# This is a test parset\n"
      "	aterms = [ tec, rm, amplitude ] # of phase, diagonal, fulljones, beam, "
      "...\n"
      "	tec.type = tec\n";
  std::istringstream stream(testparset);
  ParsetReader reader(stream);

  BOOST_CHECK_THROW(reader.GetString("notakey"), std::runtime_error);
  BOOST_CHECK_THROW(reader.GetStringList("notakey"), std::runtime_error);
  BOOST_CHECK_THROW(reader.GetBool("notakey"), std::runtime_error);
}

BOOST_AUTO_TEST_CASE(invalid_value_type) {
  const char* testparset =
      "# This is a test parset\n"
      "	aterms = [ tec, rm, amplitude ] # of phase, diagonal, fulljones, beam, "
      "...\n"
      "	tec.type = tec\n";
  std::istringstream stream(testparset);
  ParsetReader reader(stream);

  BOOST_CHECK_THROW(reader.GetString("aterms"), std::runtime_error);
  BOOST_CHECK_THROW(reader.GetStringList("tec.type"), std::runtime_error);
  BOOST_CHECK_THROW(reader.GetBool("tec.type"), std::runtime_error);
}

BOOST_AUTO_TEST_CASE(multiple_backets) {
  const char* testparset = "files = [[ a b c ]]";
  std::istringstream stream(testparset);
  ParsetReader reader(stream);

  std::vector<std::string> v = reader.GetStringList("files");
  std::vector<std::string> ref{"a", "b", "c"};
  BOOST_CHECK_EQUAL_COLLECTIONS(v.begin(), v.end(), ref.begin(), ref.end());
}

BOOST_AUTO_TEST_SUITE_END()

}  // namespace wsclean