]> Git Repo - VerusCoin.git/commitdiff
Correct and extend EstimateNetHeightInner tests
authorJack Grigg <[email protected]>
Fri, 28 Jul 2017 10:35:46 +0000 (10:35 +0000)
committerJack Grigg <[email protected]>
Fri, 28 Jul 2017 10:45:44 +0000 (10:45 +0000)
Corrections are to the median block times, which were generated by subtracting
CBlockIndex::nMedianTimeSpan / 2 from the block height and then multiplying by
the target spacing. GetMedianTimePast() takes an array sorted by std::sort() and
returns element CBlockIndex::nMedianTimeSpan / 2, meaning that if
CBlockIndex::nMedianTimeSpan is odd (which it is), there is an out-by-one error
in the subtraction.

src/gtest/test_metrics.cpp

index 8e0aa9e02858b52438119ec04d46bf1e1d882f9c..8f313b5d2403ad513e5fe2dfebb9afa530ac399b 100644 (file)
@@ -96,24 +96,40 @@ TEST(Metrics, GetLocalSolPS) {
 TEST(Metrics, EstimateNetHeightInner) {
     // Ensure that the (rounded) current height is returned if the tip is current
     SetMockTime(15000);
-    EXPECT_EQ(100, EstimateNetHeightInner(100, 14250, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(100, 14100, 50, 7500, 150));
     SetMockTime(15150);
-    EXPECT_EQ(100, EstimateNetHeightInner(101, 14400, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(101, 14250, 50, 7500, 150));
 
     // Ensure that correct estimates are returned if the tip is in the past
     SetMockTime(15300); // Tip is 2 blocks behind
-    EXPECT_EQ(100, EstimateNetHeightInner(100, 14250, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(100, 14100, 50, 7500, 150));
     SetMockTime(15900); // Tip is 6 blocks behind
-    EXPECT_EQ(110, EstimateNetHeightInner(100, 14250, 50, 7500, 150));
+    EXPECT_EQ(110, EstimateNetHeightInner(100, 14100, 50, 7500, 150));
+
+    // Check estimates during resync
+    SetMockTime(15000);
+    EXPECT_EQ(100, EstimateNetHeightInner( 0,     0, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner( 7,   600, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner( 8,   600, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(10,   750, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(11,   900, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(20,  2100, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(49,  6450, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(50,  6600, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(51,  6750, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(55,  7350, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(56,  7500, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(57,  7650, 50, 7500, 150));
+    EXPECT_EQ(100, EstimateNetHeightInner(75, 10350, 50, 7500, 150));
 
     // More complex calculations:
     SetMockTime(20000);
     // - Checkpoint spacing: 200
     //   -> Average spacing: 175
     //   -> estimated height: 127 -> 130
-    EXPECT_EQ(130, EstimateNetHeightInner(100, 14250, 50, 5250, 150));
+    EXPECT_EQ(130, EstimateNetHeightInner(100, 14100, 50, 5250, 150));
     // - Checkpoint spacing: 50
     //   -> Average spacing: 100
     //   -> estimated height: 153 -> 150
-    EXPECT_EQ(150, EstimateNetHeightInner(100, 14250, 50, 12000, 150));
+    EXPECT_EQ(150, EstimateNetHeightInner(100, 14100, 50, 12000, 150));
 }
This page took 0.027746 seconds and 4 git commands to generate.