subsurface/tests/testplannershared.cpp
jan Iversen e55c740d84 diveplanner: call planner model directly for simple variables.
Variables without conversion, do not need to pass plannerShared
(due to the QML interface).

Simple variables do not pass plannerShared, but diveplanner
in desktop-widgets and qmlinterface in mobile-widgets call the
implementation directly.

Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-25 17:13:20 -08:00

208 lines
6.7 KiB
C++

// SPDX-License-Identifier: GPL-2.0
#include "testplannershared.h"
#include "backend-shared/plannershared.h"
#include "core/settings/qPrefDivePlanner.h"
#include "core/settings/qPrefUnit.h"
#include <QTest>
#include <QSignalSpy>
void TestPlannerShared::initTestCase()
{
QCoreApplication::setOrganizationName("Subsurface");
QCoreApplication::setOrganizationDomain("subsurface.hohndel.org");
QCoreApplication::setApplicationName("SubsurfaceTestPlannerShared");
plannerShared::instance();
}
// test values have been researched with official subsurface 4.9.3
//
// research have been done by using the UI of subsurface, while
// checking the content of org.hohndel.subsurface.Subsurface.plist
// (securing UI value it not the default)
//
// All test have been done on a iMac Pro with Catalina 10.15.2, values in the plist
// might be different on other systems.
// if you experience such problems, please report these so a proper adjustment can
// be made.
//
// meters pr time unit and feet pr time unit
// UI (meters) - plist value UI (feet) - plist value
// 16m - 267 33f - 168
// 7m - 117 27f - 137
// 8m - 133 40f - 203
// 10m - 167 35f - 178
//
// liter pr time unit and cuft pr time unit
// UI (liters) - plist value UI (cuft) - plist value
// 30l - 30000 0,9cuft - 25485
// 5l - 5000 0,01cuft - 283
// 8l - 8000 0,4cuft - 11327
// 10l - 10000 0,7cuft - 19822
//
// bar pr time unit and psi pr time unit
// UI (bar) - plist value UI (psi) - plist value
// 1,5b - 1500 1,5psi - 1500
// 1,6b - 1600 1,3psi - 1300
// 1,2b - 1200 1,1psi - 1100
// 1,0b - 1000 1,0psi - 1000
//
// sac factor
// UI - plist value
// 4,2 - 420
// 3,5 - 350
// 2,8 - 280
// 2,0 - 200
void TestPlannerShared::test_planning()
{
// Variables currently not tested
// dive_mode: OC, CCR, PSCR, FREEDIVE, NUM_DIVEMODE, UNDEF_COMP_TYPE
// planner_deco_mode
// dobailout
// reserve_gas
// safetystop
// gflow
// gfhigh
// vpmb_conservatism
// drop_stone_mode
// last_stop
// switch_at_req_stop
// doo2breaks
// min_switch_duration
}
void TestPlannerShared::test_gas()
{
// test independent of metric/imperial
plannerShared::set_sacfactor(4.2);
QCOMPARE(qPrefDivePlanner::sacfactor(), 420);
plannerShared::set_sacfactor(3.5);
QCOMPARE(qPrefDivePlanner::sacfactor(), 350);
qPrefDivePlanner::set_sacfactor(280);
QCOMPARE(plannerShared::sacfactor(), 2.8);
qPrefDivePlanner::set_sacfactor(200);
QCOMPARE(plannerShared::sacfactor(), 2.0);
// Set system to use meters
qPrefUnits::set_unit_system(METRIC);
plannerShared::set_bottomsac(30);
QCOMPARE(qPrefDivePlanner::bottomsac(), 30000);
plannerShared::set_bottomsac(5);
QCOMPARE(qPrefDivePlanner::bottomsac(), 5000);
qPrefDivePlanner::set_bottomsac(8000);
QCOMPARE(plannerShared::bottomsac(), 8);
qPrefDivePlanner::set_bottomsac(10000);
QCOMPARE(plannerShared::bottomsac(), 10);
plannerShared::set_decosac(30);
QCOMPARE(qPrefDivePlanner::decosac(), 30000);
plannerShared::set_decosac(5);
QCOMPARE(qPrefDivePlanner::decosac(), 5000);
qPrefDivePlanner::set_decosac(8000);
QCOMPARE(plannerShared::decosac(), 8);
qPrefDivePlanner::set_decosac(10000);
QCOMPARE(plannerShared::decosac(), 10);
plannerShared::set_bottompo2(1.5);
QCOMPARE(qPrefDivePlanner::bottompo2(), 1500);
plannerShared::set_bottompo2(1.6);
QCOMPARE(qPrefDivePlanner::bottompo2(), 1600);
qPrefDivePlanner::set_bottompo2(1200);
QCOMPARE(plannerShared::bottompo2(), 1.2);
qPrefDivePlanner::set_bottompo2(1000);
QCOMPARE(plannerShared::bottompo2(), 1.0);
plannerShared::set_decopo2(1.5);
QCOMPARE(qPrefDivePlanner::decopo2(), 1500);
plannerShared::set_decopo2(1.6);
QCOMPARE(qPrefDivePlanner::decopo2(), 1600);
qPrefDivePlanner::set_decopo2(1100);
QCOMPARE(plannerShared::decopo2(), 1.1);
qPrefDivePlanner::set_decopo2(1000);
QCOMPARE(plannerShared::decopo2(), 1.0);
plannerShared::set_bestmixend(16);
QCOMPARE(qPrefDivePlanner::bestmixend(), 16000);
plannerShared::set_bestmixend(7);
QCOMPARE(qPrefDivePlanner::bestmixend(), 7000);
qPrefDivePlanner::set_bestmixend(8000);
QCOMPARE(plannerShared::bestmixend(), 8);
qPrefDivePlanner::set_bestmixend(10000);
QCOMPARE(plannerShared::bestmixend(), 10);
// Set system to use feet
qPrefUnits::set_unit_system(IMPERIAL);
plannerShared::set_bottomsac(0.9);
QCOMPARE(qPrefDivePlanner::bottomsac(), 25485);
plannerShared::set_bottomsac(0.01);
QCOMPARE(qPrefDivePlanner::bottomsac(), 283);
// Remark return will from qPref is in m / 1000.
qPrefDivePlanner::set_bottomsac(2830);
QCOMPARE(plannerShared::bottomsac(), 2.83);
qPrefDivePlanner::set_bottomsac(16000);
QCOMPARE(plannerShared::bottomsac(), 16);
plannerShared::set_decosac(0.9);
QCOMPARE(qPrefDivePlanner::decosac(), 25485);
plannerShared::set_decosac(0.01);
QCOMPARE(qPrefDivePlanner::decosac(), 283);
// Remark return will from qPref is in m / 1000.
qPrefDivePlanner::set_decosac(11500);
QCOMPARE(plannerShared::decosac(), 11.5);
qPrefDivePlanner::set_decosac(19800);
QCOMPARE(plannerShared::decosac(), 19.8);
// Remark bottompo2 is in BAR, even though unit system is
// Imperial, the desktop version is like that.
plannerShared::set_bottompo2(1.5);
QCOMPARE(qPrefDivePlanner::bottompo2(), 1500);
plannerShared::set_bottompo2(1.6);
QCOMPARE(qPrefDivePlanner::bottompo2(), 1600);
qPrefDivePlanner::set_bottompo2(1200);
QCOMPARE(plannerShared::bottompo2(), 1.2);
qPrefDivePlanner::set_bottompo2(1000);
QCOMPARE(plannerShared::bottompo2(), 1.0);
// Remark decopo2 is in BAR, even though unit system is
// Imperial, the desktop version is like that.
plannerShared::set_decopo2(1.5);
QCOMPARE(qPrefDivePlanner::decopo2(), 1500);
plannerShared::set_decopo2(1.6);
QCOMPARE(qPrefDivePlanner::decopo2(), 1600);
qPrefDivePlanner::set_decopo2(1200);
//Not implemented QCOMPARE(plannerShared::decopo2(), 1.2);
qPrefDivePlanner::set_decopo2(1000);
QCOMPARE(plannerShared::decopo2(), 1.0);
plannerShared::set_bestmixend(33);
QCOMPARE(qPrefDivePlanner::bestmixend(), 10058);
plannerShared::set_bestmixend(27);
QCOMPARE(qPrefDivePlanner::bestmixend(), 8230);
qPrefDivePlanner::set_bestmixend(11000);
QCOMPARE(plannerShared::bestmixend(), 36);
qPrefDivePlanner::set_bestmixend(7000);
QCOMPARE(plannerShared::bestmixend(), 23);
// Variables currently not tested
// o2narcotic
}
void TestPlannerShared::test_notes()
{
// Variables currently not tested
// display_runtime
// display_duration
// display_transitions
// verbatim_plan
// display_variations
}
QTEST_MAIN(TestPlannerShared)