diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/testplan.cpp | 119 | ||||
-rw-r--r-- | tests/testplan.h | 13 |
2 files changed, 132 insertions, 0 deletions
diff --git a/tests/testplan.cpp b/tests/testplan.cpp new file mode 100644 index 000000000..f08cfdeeb --- /dev/null +++ b/tests/testplan.cpp @@ -0,0 +1,119 @@ +#include "dive.h" +#include "testplan.h" +#include "planner.h" +#include "units.h" +#include <QDebug> + +// testing the dive plan algorithm +extern bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool show_disclaimer); + +void setupPrefs() +{ + prefs = default_prefs; + prefs.ascrate50 = feet_to_mm(30) / 60; + prefs.ascrate75 = prefs.ascrate50; + prefs.ascratestops = prefs.ascrate50; + prefs.ascratelast6m = feet_to_mm(10) / 60; + prefs.last_stop = true; + +} + +void setupPlan(struct diveplan *dp) +{ + dp->salinity = 10030; + dp->surface_pressure = 1013; + dp->gfhigh = 100; + dp->gflow = 100; + dp->bottomsac = 0; + dp->decosac = 0; + + struct gasmix bottomgas = { {150}, {450} }; + struct gasmix ean36 = { {360}, {0} }; + struct gasmix oxygen = { {1000}, {0} }; + pressure_t po2 = { 1600 }; + displayed_dive.cylinder[0].gasmix = bottomgas; + displayed_dive.cylinder[1].gasmix = ean36; + displayed_dive.cylinder[2].gasmix = oxygen; + reset_cylinders(&displayed_dive, true); + free_dps(dp); + + int droptime = M_OR_FT(79, 260) * 60 / M_OR_FT(23, 75); + plan_add_segment(dp, droptime, M_OR_FT(79, 260), bottomgas, 0, 1); + plan_add_segment(dp, 30*60 - droptime, M_OR_FT(79, 260), bottomgas, 0, 1); + plan_add_segment(dp, 0, gas_mod(&ean36, po2, M_OR_FT(3,10)).mm, ean36, 0, 1); + plan_add_segment(dp, 0, gas_mod(&oxygen, po2, M_OR_FT(3,10)).mm, oxygen, 0, 1); +} + +void TestPlan::testMetric() +{ + char *cache = NULL; + + setupPrefs(); + prefs.unit_system = METRIC; + prefs.units.length = units::METERS; + prefs.deco_mode = BUEHLMANN; + + struct diveplan testPlan = { 0 }; + setupPlan(&testPlan); + + plan(&testPlan, &cache, 1, 0); + +#if DEBUG + free(displayed_dive.notes); + displayed_dive.notes = NULL; + save_dive(stdout, &displayed_dive); +#endif + + // check first gas change to EAN36 at 33m + struct event *ev = displayed_dive.dc.events; + QVERIFY(ev != NULL); + QCOMPARE(ev->gas.index, 1); + QCOMPARE(ev->value, 36); + QCOMPARE(get_depth_at_time(&displayed_dive.dc, ev->time.seconds), 33000); + // check second gas change to Oxygen at 6m + ev = ev->next; + QVERIFY(ev != NULL); + QCOMPARE(ev->gas.index, 2); + QCOMPARE(ev->value, 100); + QCOMPARE(get_depth_at_time(&displayed_dive.dc, ev->time.seconds), 6000); + // check expected run time of 105 minutes + QCOMPARE(displayed_dive.dc.duration.seconds, 104u * 60u); +} + +void TestPlan::testImperial() +{ + char *cache = NULL; + + setupPrefs(); + prefs.unit_system = IMPERIAL; + prefs.units.length = units::FEET; + prefs.deco_mode = BUEHLMANN; + + struct diveplan testPlan = { 0 }; + setupPlan(&testPlan); + + plan(&testPlan, &cache, 1, 0); + +#if DEBUG + free(displayed_dive.notes); + displayed_dive.notes = NULL; + save_dive(stdout, &displayed_dive); +#endif + + // check first gas change to EAN36 at 33m + struct event *ev = displayed_dive.dc.events; + QVERIFY(ev != NULL); + QCOMPARE(ev->gas.index, 1); + QCOMPARE(ev->value, 36); + QCOMPARE(get_depth_at_time(&displayed_dive.dc, ev->time.seconds), 33528); + // check second gas change to Oxygen at 6m + ev = ev->next; + QVERIFY(ev != NULL); + QCOMPARE(ev->gas.index, 2); + QCOMPARE(ev->value, 100); + QCOMPARE(get_depth_at_time(&displayed_dive.dc, ev->time.seconds), 6096); + // check expected run time of 105 minutes + QCOMPARE(displayed_dive.dc.duration.seconds, 105u * 60u); +} + +QTEST_MAIN(TestPlan) diff --git a/tests/testplan.h b/tests/testplan.h new file mode 100644 index 000000000..b35cd75c6 --- /dev/null +++ b/tests/testplan.h @@ -0,0 +1,13 @@ +#ifndef TESTPLAN_H +#define TESTPLAN_H + +#include <QTest> + +class TestPlan : public QObject { + Q_OBJECT +private slots: + void testImperial(); + void testMetric(); +}; + +#endif // TESTPLAN_H |