Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_UnitTest_TimeEventRange.cpp
Go to the documentation of this file.
1 // @HEADER
2 // ****************************************************************************
3 // Tempus: Copyright (2017) Sandia Corporation
4 //
5 // Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6 // ****************************************************************************
7 // @HEADER
8 
10 #include "Tempus_TimeEventRange.hpp"
11 
12 static double PI = M_PI;
13 
14 namespace Tempus_Unit_Test {
15 
16 using Teuchos::RCP;
17 using Teuchos::rcp;
18 using Teuchos::rcp_const_cast;
19 using Teuchos::rcp_dynamic_cast;
20 
21 // ************************************************************
22 // ************************************************************
23 TEUCHOS_UNIT_TEST(TimeEventRange, Default_Construction)
24 {
25  auto te = rcp(new Tempus::TimeEventRange<double>());
26 
27  TEST_COMPARE(te->getName(), ==, "TimeEventRange (0; 0; 0)");
28  te->setName("TestName");
29  TEST_COMPARE(te->getName(), ==, "TestName");
30 
31  TEST_FLOATING_EQUALITY(te->getTimeStart(), 0.0, 1.0e-14);
32  TEST_FLOATING_EQUALITY(te->getTimeStop(), 0.0, 1.0e-14);
33  TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.0, 1.0e-14);
34  TEST_COMPARE(te->getNumEvents(), ==, 1);
35 
37  te->getRelTol(), std::numeric_limits<double>::epsilon() * 100.0, 1.0e-14);
39  te->getAbsTol(), std::numeric_limits<double>::epsilon() * 100.0, 1.0e-14);
40 
41  TEST_COMPARE(te->getLandOnExactly(), ==, true);
42 }
43 
44 // ************************************************************
45 // ************************************************************
46 TEUCHOS_UNIT_TEST(TimeEventRange, Full_Construction_Stride)
47 {
48  auto te = rcp(new Tempus::TimeEventRange<double>(0.0, PI, 1.0, "TestName",
49  true, 1.0e-14));
50 
51  // te->describe(out, Teuchos::VERB_EXTREME);
52 
53  TEST_COMPARE(te->getName(), ==, "TestName");
54 
55  // Test when everything is zero.
56  TEST_FLOATING_EQUALITY(te->getTimeStart(), 0.0, 1.0e-14);
57  TEST_FLOATING_EQUALITY(te->getTimeStop(), PI, 1.0e-14);
58  TEST_FLOATING_EQUALITY(te->getTimeStride(), 1.0, 1.0e-14);
59  TEST_COMPARE(te->getNumEvents(), ==, 4);
60 
61  auto teRange2 = rcp(new Tempus::TimeEventRange<double>(
62  -PI / 2.0, PI / 2.0, PI / 4.0, "teRange2", true, 1.0e-14));
63 
64  TEST_FLOATING_EQUALITY(teRange2->timeToNextEvent(0.1), PI / 4.0 - 0.1,
65  1.0e-14);
66 }
67 
68 // ************************************************************
69 // ************************************************************
70 TEUCHOS_UNIT_TEST(TimeEventRange, Full_Construction_NumEvents)
71 {
72  auto te = rcp(new Tempus::TimeEventRange<double>(0.0, PI, 5, "TestName", true,
73  1.0e-14));
74 
75  TEST_COMPARE(te->getName(), ==, "TestName");
76 
77  // Test when everything is zero.
78  TEST_FLOATING_EQUALITY(te->getTimeStart(), 0.0, 1.0e-14);
79  TEST_FLOATING_EQUALITY(te->getTimeStop(), PI, 1.0e-14);
80  TEST_FLOATING_EQUALITY(te->getTimeStride(), PI / 4.0, 1.0e-14);
81  TEST_COMPARE(te->getNumEvents(), ==, 5);
82 }
83 
84 // ************************************************************
85 // ************************************************************
86 TEUCHOS_UNIT_TEST(TimeEventRange, Basic_Accessors)
87 {
88  auto te = rcp(new Tempus::TimeEventRange<double>());
89 
90  te->setRelTol(0.1);
91  TEST_FLOATING_EQUALITY(te->getRelTol(), 0.1, 1.0e-14);
92  te->setRelTol(1.0e-14);
93  te->setLandOnExactly(false);
94  TEST_COMPARE(te->getLandOnExactly(), ==, false);
95  te->setLandOnExactly(true);
96 
97  // Reset start after stop.
98  te->setTimeStart(1.0);
99  TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
100  TEST_FLOATING_EQUALITY(te->getTimeStop(), 1.0, 1.0e-14);
101  TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.0, 1.0e-14);
102  TEST_COMPARE(te->getNumEvents(), ==, 1);
103 
104  // Reset stop.
105  te->setTimeStop(4.0);
106  TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
107  TEST_FLOATING_EQUALITY(te->getTimeStop(), 4.0, 1.0e-14);
108  TEST_FLOATING_EQUALITY(te->getTimeStride(), 3.0, 1.0e-14);
109  TEST_COMPARE(te->getNumEvents(), ==, 2);
110 
111  // Reset stride.
112  te->setTimeStride(0.5);
113  TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
114  TEST_FLOATING_EQUALITY(te->getTimeStop(), 4.0, 1.0e-14);
115  TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.5, 1.0e-14);
116  TEST_COMPARE(te->getNumEvents(), ==, 7);
117 }
118 
119 // ************************************************************
120 // ************************************************************
121 TEUCHOS_UNIT_TEST(TimeEventRange, Stride)
122 {
123  auto te = rcp(new Tempus::TimeEventRange<double>());
124  te->setTimeStart(1.0);
125  te->setTimeStop(4.0);
126  te->setTimeStride(0.5);
127 
128  // Negative stride should be reset to stop_-start_.
129  te->setTimeStride(-0.5);
130  TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
131  TEST_FLOATING_EQUALITY(te->getTimeStop(), 4.0, 1.0e-14);
132  TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.5, 1.0e-14);
133  TEST_COMPARE(te->getNumEvents(), ==, 7);
134 
135  // Large stride should be reset to stop_-start_.
136  te->setTimeStride(5.0);
137  TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
138  TEST_FLOATING_EQUALITY(te->getTimeStop(), 4.0, 1.0e-14);
139  TEST_FLOATING_EQUALITY(te->getTimeStride(), 3.0, 1.0e-14);
140  TEST_COMPARE(te->getNumEvents(), ==, 2);
141 
142  // Stride smaller than relative tolerance should be reset to stop_-start_.
143  te->setTimeStride(1.0e-14);
144  TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
145  TEST_FLOATING_EQUALITY(te->getTimeStop(), 4.0, 1.0e-14);
146  TEST_FLOATING_EQUALITY(te->getTimeStride(), 3.0, 1.0e-14);
147  TEST_COMPARE(te->getNumEvents(), ==, 2);
148 }
149 
150 // ************************************************************
151 // ************************************************************
152 TEUCHOS_UNIT_TEST(TimeEventRange, setTimeRange)
153 {
154  auto te = rcp(new Tempus::TimeEventRange<double>());
155 
156  // Set with time range.
157  te->setTimeRange(0.0, PI, 1.0);
158  TEST_FLOATING_EQUALITY(te->getTimeStart(), 0.0, 1.0e-14);
159  TEST_FLOATING_EQUALITY(te->getTimeStop(), PI, 1.0e-14);
160  TEST_FLOATING_EQUALITY(te->getTimeStride(), 1.0, 1.0e-14);
161  TEST_COMPARE(te->getNumEvents(), ==, 4);
162 }
163 
164 // ************************************************************
165 // ************************************************************
166 TEUCHOS_UNIT_TEST(TimeEventRange, isTime)
167 {
168  auto te = rcp(new Tempus::TimeEventRange<double>());
169  te->setTimeRange(0.0, PI, 1.0);
170  te->setRelTol(1.0e-14);
171 
172  // Before first event. (This is exactly one stride before range.)
173  TEST_COMPARE(te->isTime(-1.0 + -10.0e-14), ==,
174  false); // Just outside tolerance.
175  TEST_COMPARE(te->isTime(-1.0 + -0.1e-14), ==,
176  false); // Just inside tolerance.
177  TEST_COMPARE(te->isTime(-1.0 + 0.0), ==, false); // Right on timeEvent.
178  TEST_COMPARE(te->isTime(-1.0 + 0.1e-14), ==,
179  false); // Just inside tolerance.
180  TEST_COMPARE(te->isTime(-1.0 + 10.0e-14), ==,
181  false); // Just outside tolerance.
182 
183  // Around first event.
184  TEST_COMPARE(te->isTime(-10.0e-14), ==, false); // Just outside tolerance.
185  TEST_COMPARE(te->isTime(-0.1e-14), ==, true); // Just inside tolerance.
186  TEST_COMPARE(te->isTime(0.0), ==, true); // Right on timeEvent.
187  TEST_COMPARE(te->isTime(0.1e-14), ==, true); // Just inside tolerance.
188  TEST_COMPARE(te->isTime(10.0e-14), ==, false); // Just outside tolerance.
189 
190  // Around mid event.
191  TEST_COMPARE(te->isTime(1.0 + -10.0e-14), ==,
192  false); // Just outside tolerance.
193  TEST_COMPARE(te->isTime(1.0 + -0.1e-14), ==, true); // Just inside tolerance.
194  TEST_COMPARE(te->isTime(1.0 + 0.0), ==, true); // Right on timeEvent.
195  TEST_COMPARE(te->isTime(1.0 + 0.1e-14), ==, true); // Just inside tolerance.
196  TEST_COMPARE(te->isTime(1.0 + 10.0e-14), ==,
197  false); // Just outside tolerance.
198 
199  // Around last event.
200  TEST_COMPARE(te->isTime(3.0 + -10.0e-14), ==,
201  false); // Just outside tolerance.
202  TEST_COMPARE(te->isTime(3.0 + -0.1e-14), ==, true); // Just inside tolerance.
203  TEST_COMPARE(te->isTime(3.0 + 0.0), ==, true); // Right on timeEvent.
204  TEST_COMPARE(te->isTime(3.0 + 0.1e-14), ==, true); // Just inside tolerance.
205  TEST_COMPARE(te->isTime(3.0 + 10.0e-14), ==,
206  false); // Just outside tolerance.
207 
208  // After last event. (This is exactly one stride after range.)
209  TEST_COMPARE(te->isTime(4.0 + -10.0e-14), ==,
210  false); // Just outside tolerance.
211  TEST_COMPARE(te->isTime(4.0 + -0.1e-14), ==,
212  false); // Just inside tolerance.
213  TEST_COMPARE(te->isTime(4.0 + 0.0), ==, false); // Right on timeEvent.
214  TEST_COMPARE(te->isTime(4.0 + 0.1e-14), ==, false); // Just inside tolerance.
215  TEST_COMPARE(te->isTime(4.0 + 10.0e-14), ==,
216  false); // Just outside tolerance.
217 }
218 
219 // ************************************************************
220 // ************************************************************
221 TEUCHOS_UNIT_TEST(TimeEventRange, timeToNextEvent)
222 {
223  auto te = rcp(new Tempus::TimeEventRange<double>());
224  te->setTimeRange(0.0, PI, 1.0);
225  te->setRelTol(1.0e-14);
226 
227  // Test timeToNextEvent.
228  // Around first event.
229  TEST_FLOATING_EQUALITY(te->timeToNextEvent(-10.0e-14), 10.0e-14,
230  1.0e-14); // Just outside tolerance.
231  TEST_FLOATING_EQUALITY(te->timeToNextEvent(-0.1e-14), 1.0 + 0.1e-14,
232  1.0e-14); // Just inside tolerance.
233  TEST_FLOATING_EQUALITY(te->timeToNextEvent(0.0), 1.0 + 0.0,
234  1.0e-14); // Right on timeEvent.
235  TEST_FLOATING_EQUALITY(te->timeToNextEvent(0.1e-14), 1.0 - 0.1e-14,
236  1.0e-14); // Just inside tolerance.
237  TEST_FLOATING_EQUALITY(te->timeToNextEvent(10.0e-14), 1.0 - 10.0e-14,
238  1.0e-14); // Just outside tolerance.
239 
240  // Around mid event.
241  TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0 + -10.0e-14), 10.0e-14,
242  1.0e-02); // Just outside tolerance.
243  TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0 + -0.1e-14), 1.0 + 0.1e-14,
244  1.0e-01); // Just inside tolerance.
245  TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0 + 0.0), 1.0 + 0.0,
246  1.0e-02); // Right on timeEvent.
247  TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0 + 0.1e-14), 1.0 - 0.1e-14,
248  1.0e-01); // Just inside tolerance.
249  TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0 + 10.0e-14), 1.0 - 10.0e-14,
250  1.0e-14); // Just outside tolerance.
251 
252  // Around last event.
253  TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0 + -10.0e-14), 10.0e-14,
254  1.0e-02); // Just outside tolerance.
255  TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0 + -0.1e-14),
256  te->getDefaultTime(),
257  1.0e-01); // Just inside tolerance.
258  TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0 + 0.0), te->getDefaultTime(),
259  1.0e-02); // Right on timeEvent.
260  TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0 + 0.1e-14),
261  te->getDefaultTime(),
262  1.0e-01); // Just inside tolerance.
263  TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0 + 10.0e-14),
264  te->getDefaultTime(),
265  1.0e-02); // Just outside tolerance.
266 }
267 
268 // ************************************************************
269 // ************************************************************
270 TEUCHOS_UNIT_TEST(TimeEventRange, timeOfNextEvent)
271 {
272  auto te = rcp(new Tempus::TimeEventRange<double>());
273  te->setTimeRange(0.0, PI, 1.0);
274  te->setRelTol(1.0e-14);
275 
276  // Test timeOfNextEvent.
277  // Around first event.
278  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(-10.0e-14), 0.0,
279  1.0e-14); // Just outside tolerance.
280  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(-0.1e-14), 1.0,
281  1.0e-14); // Just inside tolerance.
282  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(0.0), 1.0,
283  1.0e-14); // Right on timeEvent.
284  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(0.1e-14), 1.0,
285  1.0e-14); // Just inside tolerance.
286  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(10.0e-14), 1.0,
287  1.0e-14); // Just outside tolerance.
288 
289  // Around mid event.
290  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0 + -10.0e-14), 1.0,
291  1.0e-14); // Just outside tolerance.
292  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0 + -0.1e-14), 2.0,
293  1.0e-14); // Just inside tolerance.
294  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0 + 0.0), 2.0,
295  1.0e-14); // Right on timeEvent.
296  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0 + 0.1e-14), 2.0,
297  1.0e-14); // Just inside tolerance.
298  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0 + 10.0e-14), 2.0,
299  1.0e-14); // Just outside tolerance.
300 
301  // Around last event.
302  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0 + -10.0e-14), 3.0,
303  1.0e-14); // Just outside tolerance.
304  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0 + -0.1e-14),
305  te->getDefaultTime(),
306  1.0e-14); // Just inside tolerance.
307  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0 + 0.0), te->getDefaultTime(),
308  1.0e-14); // Right on timeEvent.
309  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0 + 0.1e-14),
310  te->getDefaultTime(),
311  1.0e-14); // Just inside tolerance.
312  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0 + 10.0e-14),
313  te->getDefaultTime(),
314  1.0e-14); // Just outside tolerance.
315 }
316 
317 // ************************************************************
318 // ************************************************************
319 TEUCHOS_UNIT_TEST(TimeEventRange, eventInRange)
320 {
321  auto te = rcp(new Tempus::TimeEventRange<double>());
322  te->setTimeRange(0.0, PI, 1.0);
323  te->setRelTol(1.0e-14);
324 
325  // Test eventInRange.
326  // Right end of input range.
327  // Around first event.
328  TEST_COMPARE(te->eventInRange(-1.0, -10.0e-14), ==,
329  false); // Just outside tolerance.
330  TEST_COMPARE(te->eventInRange(-1.0, -0.1e-14), ==,
331  true); // Just inside tolerance.
332  TEST_COMPARE(te->eventInRange(-1.0, 0.0), ==, true); // Right on timeEvent.
333  TEST_COMPARE(te->eventInRange(-1.0, 0.1e-14), ==,
334  true); // Just inside tolerance.
335  TEST_COMPARE(te->eventInRange(-1.0, 10.0e-14), ==,
336  true); // Just outside tolerance.
337 
338  // Around mid event.
339  TEST_COMPARE(te->eventInRange(0.5, 1.0 + -10.0e-14), ==,
340  false); // Just outside tolerance.
341  TEST_COMPARE(te->eventInRange(0.5, 1.0 + -0.1e-14), ==,
342  true); // Just inside tolerance.
343  TEST_COMPARE(te->eventInRange(0.5, 1.0 + 0.0), ==,
344  true); // Right on timeEvent.
345  TEST_COMPARE(te->eventInRange(0.5, 1.0 + 0.1e-14), ==,
346  true); // Just inside tolerance.
347  TEST_COMPARE(te->eventInRange(0.5, 1.0 + 10.0e-14), ==,
348  true); // Just outside tolerance.
349 
350  // Around last event.
351  TEST_COMPARE(te->eventInRange(2.5, 3.0 + -10.0e-14), ==,
352  false); // Just outside tolerance.
353  TEST_COMPARE(te->eventInRange(2.5, 3.0 + -0.1e-14), ==,
354  true); // Just inside tolerance.
355  TEST_COMPARE(te->eventInRange(2.5, 3.0 + 0.0), ==,
356  true); // Right on timeEvent.
357  TEST_COMPARE(te->eventInRange(2.5, 3.0 + 0.1e-14), ==,
358  true); // Just inside tolerance.
359  TEST_COMPARE(te->eventInRange(2.5, 3.0 + 10.0e-14), ==,
360  true); // Just outside tolerance.
361 
362  // Left end of input range.
363  // Around first event.
364  TEST_COMPARE(te->eventInRange(-10.0e-14, 0.5), ==,
365  true); // Just outside tolerance.
366  TEST_COMPARE(te->eventInRange(-0.1e-14, 0.5), ==,
367  false); // Just inside tolerance.
368  TEST_COMPARE(te->eventInRange(0.0, 0.5), ==, false); // Right on timeEvent.
369  TEST_COMPARE(te->eventInRange(0.1e-14, 0.5), ==,
370  false); // Just inside tolerance.
371  TEST_COMPARE(te->eventInRange(10.0e-14, 0.5), ==,
372  false); // Just outside tolerance.
373 
374  // Around mid event.
375  TEST_COMPARE(te->eventInRange(1.0 + -10.0e-14, 1.5), ==,
376  true); // Just outside tolerance.
377  TEST_COMPARE(te->eventInRange(1.0 + -0.1e-14, 1.5), ==,
378  false); // Just inside tolerance.
379  TEST_COMPARE(te->eventInRange(1.0 + 0.0, 1.5), ==,
380  false); // Right on timeEvent.
381  TEST_COMPARE(te->eventInRange(1.0 + 0.1e-14, 1.5), ==,
382  false); // Just inside tolerance.
383  TEST_COMPARE(te->eventInRange(1.0 + 10.0e-14, 1.5), ==,
384  false); // Just outside tolerance.
385 
386  // Around last event.
387  TEST_COMPARE(te->eventInRange(3.0 + -10.0e-14, 4.0), ==,
388  true); // Just outside tolerance.
389  TEST_COMPARE(te->eventInRange(3.0 + -0.1e-14, 4.0), ==,
390  false); // Just inside tolerance.
391  TEST_COMPARE(te->eventInRange(3.0 + 0.0, 4.0), ==,
392  false); // Right on timeEvent.
393  TEST_COMPARE(te->eventInRange(3.0 + 0.1e-14, 4.0), ==,
394  false); // Just inside tolerance.
395  TEST_COMPARE(te->eventInRange(3.0 + 10.0e-14, 4.0), ==,
396  false); // Just outside tolerance.
397 }
398 
399 // ************************************************************
400 // ************************************************************
401 TEUCHOS_UNIT_TEST(TimeEventRange, getValidParameters)
402 {
403  auto ter = rcp(new Tempus::TimeEventRange<double>());
404 
405  auto pl = ter->getValidParameters();
406 
407  TEST_COMPARE(pl->get<std::string>("Type"), ==, "Range");
408  TEST_COMPARE(pl->get<std::string>("Name"), ==, "TimeEventRange (0; 0; 0)");
409  TEST_FLOATING_EQUALITY(pl->get<double>("Start Time"), 0.0, 1.0e-14);
410  TEST_FLOATING_EQUALITY(pl->get<double>("Stop Time"), 0.0, 1.0e-14);
411  TEST_FLOATING_EQUALITY(pl->get<double>("Stride Time"), 0.0, 1.0e-14);
412  TEST_COMPARE(pl->get<int>("Number of Events"), ==, 1);
413  TEST_FLOATING_EQUALITY(pl->get<double>("Relative Tolerance"),
414  std::numeric_limits<double>::epsilon() * 100.0,
415  1.0e-14);
416  TEST_COMPARE(pl->get<bool>("Land On Exactly"), ==, true);
417 
418  { // Ensure that parameters are "used", excluding sublists.
419  std::ostringstream unusedParameters;
420  pl->unused(unusedParameters);
421  TEST_COMPARE(unusedParameters.str(), ==, "");
422  }
423 }
424 
425 // ************************************************************
426 // ************************************************************
428 {
429  // Construct parameterList similar to getValidParameters().
431  Teuchos::parameterList("Time Event Range");
432 
433  pl->set("Name", "Unit Test Time Event Range");
434  pl->set("Type", "Range");
435  pl->set("Start Time", -0.1);
436  pl->set("Stop Time", 1.1);
437  pl->set("Stride Time", 0.1);
438  pl->set("Relative Tolerance", 1.0e-10);
439  pl->set("Land On Exactly", false);
440 
441  // Construct TimeEventRange from ParameterList.
442  auto ter = Tempus::createTimeEventRange<double>(pl);
443 
444  // ter->describe(out, Teuchos::VERB_EXTREME);
445 
446  TEST_COMPARE(ter->getName(), ==, "Unit Test Time Event Range");
447  TEST_COMPARE(ter->getType(), ==, "Range");
448  TEST_FLOATING_EQUALITY(ter->getTimeStart(), -0.1, 1.0e-14);
449  TEST_FLOATING_EQUALITY(ter->getTimeStop(), 1.1, 1.0e-14);
450  TEST_FLOATING_EQUALITY(ter->getTimeStride(), 0.1, 1.0e-14);
451  TEST_COMPARE(ter->getNumEvents(), ==, 13);
452  TEST_FLOATING_EQUALITY(ter->getRelTol(), 1.0e-10, 1.0e-14);
453  TEST_COMPARE(ter->getLandOnExactly(), ==, false);
454 }
455 
456 // ************************************************************
457 // ************************************************************
458 TEUCHOS_UNIT_TEST(TimeEventRange, SingleEventAtZero)
459 {
460  auto ter = rcp(new Tempus::TimeEventRange<double>(0.0, 0.0, 0.0,
461  "SingleEventAtZero", true));
462  ter->describe(out, Teuchos::VERB_EXTREME);
463 
464  TEST_COMPARE(ter->getNumEvents(), ==, 1);
465 
466  TEST_COMPARE(ter->isTime(0.0), ==, true);
467  TEST_FLOATING_EQUALITY(ter->timeToNextEvent(-1.0), 1.0, 1.0e-14);
468  TEST_FLOATING_EQUALITY(ter->timeOfNextEvent(-1.0), 0.0, 1.0e-14);
469  TEST_FLOATING_EQUALITY(ter->timeToNextEvent(0.0), ter->getDefaultTime(),
470  1.0e-14);
471  TEST_FLOATING_EQUALITY(ter->timeOfNextEvent(0.0), ter->getDefaultTime(),
472  1.0e-14);
473  TEST_COMPARE(ter->eventInRange(-1.0, 1.0), ==, true);
474  TEST_COMPARE(ter->eventInRange(0.0, 1.0), ==, false);
475  TEST_COMPARE(ter->eventInRange(0.0, 0.0), ==, false);
476 }
477 
478 } // namespace Tempus_Unit_Test
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
#define TEST_COMPARE(v1, comp, v2)
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
TimeEventRange specifies a start, stop and stride time.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< TimeEventRange< Scalar > > createTimeEventRange(Teuchos::RCP< Teuchos::ParameterList > pList)
Nonmember Constructor via ParameterList.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
static double PI