[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [4928] Reimplement product_database::constrain_scalar()
From: |
Greg Chicares |
Subject: |
[lmi-commits] [4928] Reimplement product_database::constrain_scalar() |
Date: |
Sat, 08 May 2010 15:16:37 +0000 |
Revision: 4928
http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=4928
Author: chicares
Date: 2010-05-08 15:16:36 +0000 (Sat, 08 May 2010)
Log Message:
-----------
Reimplement product_database::constrain_scalar()
Modified Paths:
--------------
lmi/trunk/ChangeLog
lmi/trunk/database.cpp
lmi/trunk/ihs_database.cpp
lmi/trunk/input_test.cpp
Modified: lmi/trunk/ChangeLog
===================================================================
--- lmi/trunk/ChangeLog 2010-05-08 14:00:48 UTC (rev 4927)
+++ lmi/trunk/ChangeLog 2010-05-08 15:16:36 UTC (rev 4928)
@@ -25581,3 +25581,12 @@
ihs_database.cpp
Assert another postcondition.
+20100508T1516Z <address@hidden> [712]
+
+ database.cpp
+ ihs_database.cpp
+ input_test.cpp
+Reimplement product_database::constrain_scalar(), resolving a defect
+noted 20100506T0226Z by making product_database::Query(int) several
+times faster.
+
Modified: lmi/trunk/database.cpp
===================================================================
--- lmi/trunk/database.cpp 2010-05-08 14:00:48 UTC (rev 4927)
+++ lmi/trunk/database.cpp 2010-05-08 15:16:36 UTC (rev 4928)
@@ -36,8 +36,7 @@
#include "oecumenic_enumerations.hpp" // methuselah
#include "yare_input.hpp"
-#include <algorithm> // std::copy(), std::min()
-#include <iterator> // ostream_iterator
+#include <algorithm> // std::min()
//============================================================================
product_database::product_database
@@ -98,6 +97,7 @@
void product_database::initialize()
{
index_ = database_index(Gender, Class, Smoker, IssueAge, UWBasis, State);
+ constrain_scalar(DB_EndtAge);
length_ = static_cast<int>(*GetEntry(DB_EndtAge)[index_]) - IssueAge;
LMI_ASSERT(0 < length_ && length_ <= methuselah);
}
@@ -145,30 +145,7 @@
void product_database::constrain_scalar(int k) const
{
- std::vector<double> z;
- Query(z, k);
- if
- (
- (0 != z.size())
- && (z == std::vector<double>(z.size(), z[0]))
- )
- {
- return;
- }
- else
- {
- fatal_error()
- << "Database element "
- << GetDBNames()[k].ShortName
- << " varies by duration, but it must not. "
- << "Values by duration: "
- ;
- std::copy
- (z.begin()
- ,z.end()
- ,std::ostream_iterator<double>(fatal_error(), " ")
- );
- fatal_error() << LMI_FLUSH;
- }
+ database_entity const& v = GetEntry(k);
+ LMI_ASSERT(1 == v.GetLength());
}
Modified: lmi/trunk/ihs_database.cpp
===================================================================
--- lmi/trunk/ihs_database.cpp 2010-05-08 14:00:48 UTC (rev 4927)
+++ lmi/trunk/ihs_database.cpp 2010-05-08 15:16:36 UTC (rev 4928)
@@ -41,8 +41,7 @@
#include "product_data.hpp"
#include "yare_input.hpp"
-#include <algorithm> // std::copy(), std::min()
-#include <iterator> // ostream_iterator
+#include <algorithm> // std::min()
//============================================================================
product_database::product_database
@@ -201,30 +200,7 @@
void product_database::constrain_scalar(int k) const
{
- std::vector<double> z;
- Query(z, k);
- if
- (
- (0 != z.size())
- && (z == std::vector<double>(z.size(), z[0]))
- )
- {
- return;
- }
- else
- {
- fatal_error()
- << "Database element "
- << GetDBNames()[k].ShortName
- << " varies by duration, but it must not. "
- << "Values by duration: "
- ;
- std::copy
- (z.begin()
- ,z.end()
- ,std::ostream_iterator<double>(fatal_error(), " ")
- );
- fatal_error() << LMI_FLUSH;
- }
+ database_entity const& v = GetEntry(k);
+ LMI_ASSERT(1 == v.GetLength());
}
Modified: lmi/trunk/input_test.cpp
===================================================================
--- lmi/trunk/input_test.cpp 2010-05-08 14:00:48 UTC (rev 4927)
+++ lmi/trunk/input_test.cpp 2010-05-08 15:16:36 UTC (rev 4928)
@@ -136,6 +136,13 @@
w.assign(tax, tax + db.length());
BOOST_TEST(v == w);
+ // Scalar access is forbidden when entity varies by duration.
+ BOOST_TEST_THROW
+ (db.Query(DB_StatVxQ)
+ ,std::runtime_error
+ ,"Assertion '1 == v.GetLength()' failed."
+ );
+
std::cout
<< "\n Database speed tests..."
<< "\n initialize() : " <<
TimeAnAliquot(boost::bind(&product_database::initialize, &db))
@@ -152,8 +159,23 @@
,"Assertion 'DB_FIRST <= k && k < DB_LAST' failed."
);
- database_entity const e = db.GetEntry(DB_EndtAge);
- DBDictionary::instance().dictionary_[1 + DB_LAST] = e;
+ database_entity const maturity = db.GetEntry(DB_EndtAge);
+
+ // Maturity age must not vary by duration.
+ DBDictionary::instance().dictionary_[DB_EndtAge] = database_entity
+ (DB_StatVxQ
+ ,database_entity::e_number_of_axes
+ ,dims_stat
+ ,stat
+ );
+ BOOST_TEST_THROW
+ (db.initialize();
+ ,std::runtime_error
+ ,"Assertion '1 == v.GetLength()' failed."
+ );
+ DBDictionary::instance().dictionary_[DB_EndtAge] = maturity;
+
+ DBDictionary::instance().dictionary_[1 + DB_LAST] = maturity;
DBDictionary::instance().dictionary_.erase(DB_EndtAge);
BOOST_TEST_THROW
(db.GetEntry(DB_EndtAge)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lmi-commits] [4928] Reimplement product_database::constrain_scalar(),
Greg Chicares <=