[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master c291b59 05/14: Assert more preconditions
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master c291b59 05/14: Assert more preconditions |
Date: |
Thu, 1 Apr 2021 18:15:17 -0400 (EDT) |
branch: master
commit c291b5967d2e0e410c96c6c706b1fb244429a348
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Assert more preconditions
If all 'use_..._' are false in any year, then the formula
max
((max(A, Bgen, Cgen) - Dgen) * use_gen
,(max(A, Bsep, Csep) - Dsep) * use_sep
,(max(A, Bflr, Cflr) - Dflr) * use_flr
,(max(A, Bvlr, Cvlr) - Dvlr) * use_vlr
)
would return zero, but the law requires that it return at least 'A'.
Rewriting the formula to guarantee that directly:
max
(A
,max
((max(A, Bgen, Cgen) - Dgen) * use_gen
,(max(A, Bsep, Csep) - Dsep) * use_sep
,(max(A, Bflr, Cflr) - Dflr) * use_flr
,(max(A, Bvlr, Cvlr) - Dvlr) * use_vlr
)
)
would make it more complicated and slower. Presumably at least one of
{use_gen_, use_sep_} must always be true in the problem domain anyway,
so that the assertion would never fire.
---
i7702.cpp | 7 +++++++
i7702_init.cpp | 3 ---
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/i7702.cpp b/i7702.cpp
index b484bfa..7e19704 100644
--- a/i7702.cpp
+++ b/i7702.cpp
@@ -249,6 +249,13 @@ void i7702::assert_preconditions()
LMI_ASSERT(length_ == lmi::ssize(use_flr_));
LMI_ASSERT(length_ == lmi::ssize(use_vlr_));
+ // These must all be boolean, and not all false in any year.
+ LMI_ASSERT(AllOf(EqualTo(true, use_gen_) || EqualTo(false, use_gen_)));
+ LMI_ASSERT(AllOf(EqualTo(true, use_sep_) || EqualTo(false, use_sep_)));
+ LMI_ASSERT(AllOf(EqualTo(true, use_flr_) || EqualTo(false, use_flr_)));
+ LMI_ASSERT(AllOf(EqualTo(true, use_vlr_) || EqualTo(false, use_vlr_)));
+ LMI_ASSERT(AllOf(use_gen_ || use_sep_ || use_flr_ || use_vlr_));
+
LMI_ASSERT(each_equal(++Cgen_.begin(), Cgen_.end(), 0.0));
LMI_ASSERT(each_equal(++Csep_.begin(), Csep_.end(), 0.0));
LMI_ASSERT(each_equal(++Cflr_.begin(), Cflr_.end(), 0.0));
diff --git a/i7702_init.cpp b/i7702_init.cpp
index 9e15766..857bf7a 100644
--- a/i7702_init.cpp
+++ b/i7702_init.cpp
@@ -77,9 +77,6 @@ i7702::i7702
use_vlr_ = zero;
}
- // 7702 !! Assert that all use_* are boolean.
- // 7702 !! Assert (use_gen_ || use_sep_) for each duration.
-
// 7702 !! Alternatively, specify A0_ and delta, then calculate A1_?
A0_ = database.query<double>(DB_AnnIntRate7702);
A1_ = 0.02 + A0_;
- [lmi-commits] [lmi] master updated (8d18fa1 -> 29b2ad4), Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master 98a214c 01/14: Rule of three <<< five < zero, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master c309291 02/14: Factor out precondition assertions, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master 218e02a 03/14: Reflect short-term guarantees in 7702 interest rates, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master 2d10858 06/14: Use DB_AnnIntRateGspDelta instead of hard-coding two percent, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master 8a9085a 08/14: Reflect DB_GenAcctIntBonus in 7702 interest, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master 836c6f9 09/14: Refactor unit test, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master 637f0de 12/14: Reorder unit-test functions, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master c291b59 05/14: Assert more preconditions,
Greg Chicares <=
- [lmi-commits] [lmi] master cb16682 10/14: Make i7702 vector assignments idempotent, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master 8723736 11/14: Make bland1() truly bland, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master 36266d1 13/14: Don't echo unneeded values in unit test, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master 29b2ad4 14/14: Measure i7702 speed, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master ad538f7 07/14: Fix defect introduced 20210314T2207Z: wrong VLR, Greg Chicares, 2021/04/01
- [lmi-commits] [lmi] master 26db3ec 04/14: Move an assertion upstream, and generalize it, Greg Chicares, 2021/04/01