diff options
-rw-r--r-- | core/planner.c | 5 | ||||
-rw-r--r-- | tests/testplan.cpp | 22 |
2 files changed, 15 insertions, 12 deletions
diff --git a/core/planner.c b/core/planner.c index a0ab34cf0..8d1cbdc60 100644 --- a/core/planner.c +++ b/core/planner.c @@ -426,8 +426,9 @@ static struct gaschanges *analyze_gaslist(struct diveplan *diveplan, int *gascha struct gaschanges *gaschanges = NULL; struct divedatapoint *dp = diveplan->dp; int best_depth = displayed_dive.cylinder[*asc_cylinder].depth.mm; + bool total_time_zero = true; while (dp) { - if (dp->time == 0) { + if (dp->time == 0 && total_time_zero) { if (dp->depth <= depth) { int i = 0; nr++; @@ -449,6 +450,8 @@ static struct gaschanges *analyze_gaslist(struct diveplan *diveplan, int *gascha *asc_cylinder = dp->cylinderid; } } + } else { + total_time_zero = false; } dp = dp->next; } diff --git a/tests/testplan.cpp b/tests/testplan.cpp index a60b3d2ab..3be4497e4 100644 --- a/tests/testplan.cpp +++ b/tests/testplan.cpp @@ -56,10 +56,10 @@ void setupPlan(struct diveplan *dp) 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), 0, 0, 1); - plan_add_segment(dp, 30*60 - droptime, M_OR_FT(79, 260), 0, 0, 1); plan_add_segment(dp, 0, gas_mod(&ean36, po2, &displayed_dive, M_OR_FT(3,10)).mm, 1, 0, 1); plan_add_segment(dp, 0, gas_mod(&oxygen, po2, &displayed_dive, M_OR_FT(3,10)).mm, 2, 0, 1); + plan_add_segment(dp, droptime, M_OR_FT(79, 260), 0, 0, 1); + plan_add_segment(dp, 30*60 - droptime, M_OR_FT(79, 260), 0, 0, 1); } void setupPlanVpmb60m30minAir(struct diveplan *dp) @@ -97,9 +97,9 @@ void setupPlanVpmb60m30minEan50(struct diveplan *dp) free_dps(dp); int droptime = M_OR_FT(60, 200) * 60 / M_OR_FT(99, 330); + plan_add_segment(dp, 0, gas_mod(&ean50, po2, &displayed_dive, M_OR_FT(3,10)).mm, 1, 0, 1); plan_add_segment(dp, droptime, M_OR_FT(60, 200), 0, 0, 1); plan_add_segment(dp, 30*60 - droptime, M_OR_FT(60, 200), 0, 0, 1); - plan_add_segment(dp, 0, gas_mod(&ean50, po2, &displayed_dive, M_OR_FT(3,10)).mm, 1, 0, 1); } void setupPlanVpmb60m30minTx(struct diveplan *dp) @@ -119,9 +119,9 @@ void setupPlanVpmb60m30minTx(struct diveplan *dp) free_dps(dp); int droptime = M_OR_FT(60, 200) * 60 / M_OR_FT(99, 330); + plan_add_segment(dp, 0, gas_mod(&ean50, po2, &displayed_dive, M_OR_FT(3,10)).mm, 1, 0, 1); plan_add_segment(dp, droptime, M_OR_FT(60, 200), 0, 0, 1); plan_add_segment(dp, 30*60 - droptime, M_OR_FT(60, 200), 0, 0, 1); - plan_add_segment(dp, 0, gas_mod(&ean50, po2, &displayed_dive, M_OR_FT(3,10)).mm, 1, 0, 1); } void setupPlanVpmbMultiLevelAir(struct diveplan *dp) @@ -163,10 +163,10 @@ void setupPlanVpmb100m60min(struct diveplan *dp) free_dps(dp); int droptime = M_OR_FT(100, 330) * 60 / M_OR_FT(99, 330); - plan_add_segment(dp, droptime, M_OR_FT(100, 330), 0, 0, 1); - plan_add_segment(dp, 60*60 - droptime, M_OR_FT(100, 330), 0, 0, 1); plan_add_segment(dp, 0, gas_mod(&ean50, po2, &displayed_dive, M_OR_FT(3,10)).mm, 1, 0, 1); plan_add_segment(dp, 0, gas_mod(&oxygen, po2, &displayed_dive, M_OR_FT(3,10)).mm, 2, 0, 1); + plan_add_segment(dp, droptime, M_OR_FT(100, 330), 0, 0, 1); + plan_add_segment(dp, 60*60 - droptime, M_OR_FT(100, 330), 0, 0, 1); } void setupPlanVpmb100m10min(struct diveplan *dp) @@ -188,10 +188,10 @@ void setupPlanVpmb100m10min(struct diveplan *dp) free_dps(dp); int droptime = M_OR_FT(100, 330) * 60 / M_OR_FT(99, 330); - plan_add_segment(dp, droptime, M_OR_FT(100, 330), 0, 0, 1); - plan_add_segment(dp, 10*60 - droptime, M_OR_FT(100, 330), 0, 0, 1); plan_add_segment(dp, 0, gas_mod(&ean50, po2, &displayed_dive, M_OR_FT(3,10)).mm, 1, 0, 1); plan_add_segment(dp, 0, gas_mod(&oxygen, po2, &displayed_dive, M_OR_FT(3,10)).mm, 2, 0, 1); + plan_add_segment(dp, droptime, M_OR_FT(100, 330), 0, 0, 1); + plan_add_segment(dp, 10*60 - droptime, M_OR_FT(100, 330), 0, 0, 1); } void setupPlanVpmb30m20min(struct diveplan *dp) @@ -233,13 +233,13 @@ void setupPlanVpmb100mTo70m30min(struct diveplan *dp) free_dps(dp); int droptime = M_OR_FT(100, 330) * 60 / M_OR_FT(18, 60); + plan_add_segment(dp, 0, gas_mod(&tx21_35, po2, &displayed_dive, M_OR_FT(3,10)).mm, 1, 0, 1); + plan_add_segment(dp, 0, gas_mod(&ean50, po2, &displayed_dive, M_OR_FT(3,10)).mm, 2, 0, 1); + plan_add_segment(dp, 0, gas_mod(&oxygen, po2, &displayed_dive, M_OR_FT(3,10)).mm, 3, 0, 1); plan_add_segment(dp, droptime, M_OR_FT(100, 330), 0, 0, 1); plan_add_segment(dp, 20*60 - droptime, M_OR_FT(100, 330), 0, 0, 1); plan_add_segment(dp, 3*60, M_OR_FT(70, 230), 0, 0, 1); plan_add_segment(dp, (30 - 20 - 3) * 60, M_OR_FT(70, 230), 0, 0, 1); - plan_add_segment(dp, 0, gas_mod(&tx21_35, po2, &displayed_dive, M_OR_FT(3,10)).mm, 1, 0, 1); - plan_add_segment(dp, 0, gas_mod(&ean50, po2, &displayed_dive, M_OR_FT(3,10)).mm, 2, 0, 1); - plan_add_segment(dp, 0, gas_mod(&oxygen, po2, &displayed_dive, M_OR_FT(3,10)).mm, 3, 0, 1); } /* We compare the calculated runtimes against two values: |