lmi-commits
[Top][All Lists]
Advanced

[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)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]