Skip to content

Commit feabb82

Browse files
committed
Revert "Implement comp_double comparison function in certain tests"
This reverts commit 7bfd1b4.
1 parent f80976d commit feabb82

File tree

2 files changed

+31
-71
lines changed

2 files changed

+31
-71
lines changed

src/test/gridcoin/claim_tests.cpp

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -97,26 +97,6 @@ static CKey GetTestPrivateKey()
9797

9898
return key;
9999
}
100-
101-
// Unfortunately, GCC 13 on openSUSE i386 is misbehaving and exhibiting weird errors in the last decimal places for things
102-
// even as straightforward as
103-
//
104-
// double foo = 0.0;
105-
// text >> foo.
106-
//
107-
// This comparison function works around that by allowing a small error band to pass the tests, but not enough to invalidate
108-
// the tests on compilers that work.
109-
bool comp_double(double lhs, double rhs)
110-
{
111-
// Require exact match if 0=0.
112-
if (std::min(lhs, rhs) == 0.0) {
113-
return (lhs == rhs);
114-
} else {
115-
double unsigned_rel_error = std::abs(lhs - rhs) / std::min(lhs, rhs);
116-
117-
return (unsigned_rel_error <= double {1e-8});
118-
}
119-
}
120100
} // anonymous namespace
121101

122102
// -----------------------------------------------------------------------------
@@ -138,7 +118,7 @@ BOOST_AUTO_TEST_CASE(it_initializes_to_an_empty_claim)
138118

139119
BOOST_CHECK(claim.m_magnitude == 0);
140120
BOOST_CHECK(claim.m_research_subsidy == 0);
141-
BOOST_CHECK(comp_double(claim.m_magnitude_unit, 0.0));
121+
BOOST_CHECK(claim.m_magnitude_unit == 0.0);
142122

143123
BOOST_CHECK(claim.m_signature.empty() == true);
144124

@@ -161,7 +141,7 @@ BOOST_AUTO_TEST_CASE(it_initializes_to_the_specified_version)
161141

162142
BOOST_CHECK(claim.m_magnitude == 0);
163143
BOOST_CHECK(claim.m_research_subsidy == 0);
164-
BOOST_CHECK(comp_double(claim.m_magnitude_unit, 0.0));
144+
BOOST_CHECK(claim.m_magnitude_unit == 0.0);
165145

166146
BOOST_CHECK(claim.m_signature.empty() == true);
167147

@@ -240,7 +220,7 @@ BOOST_AUTO_TEST_CASE(it_parses_a_legacy_boincblock_string_for_researcher)
240220

241221
BOOST_CHECK(claim.m_magnitude == 123);
242222
BOOST_CHECK(claim.m_research_subsidy == 47.25 * COIN);
243-
BOOST_CHECK(comp_double(claim.m_magnitude_unit, 0.123456));
223+
BOOST_CHECK(claim.m_magnitude_unit == 0.123456);
244224

245225
BOOST_CHECK(claim.m_signature == signature);
246226

@@ -523,7 +503,7 @@ BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream_for_investor)
523503

524504
BOOST_CHECK(claim.m_research_subsidy == 0);
525505
BOOST_CHECK(claim.m_magnitude == 0.0);
526-
BOOST_CHECK(comp_double(claim.m_magnitude_unit, 0.0));
506+
BOOST_CHECK(claim.m_magnitude_unit == 0.0);
527507
BOOST_CHECK(claim.m_signature.empty() == true);
528508
BOOST_CHECK(claim.m_quorum_address.empty() == true);
529509
BOOST_CHECK(claim.m_superblock->WellFormed() == false);
@@ -565,7 +545,7 @@ BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream_for_investor_with_superblock)
565545

566546
BOOST_CHECK(claim.m_research_subsidy == 0);
567547
BOOST_CHECK(claim.m_magnitude == 0.0);
568-
BOOST_CHECK(comp_double(claim.m_magnitude_unit, 0.0));
548+
BOOST_CHECK(claim.m_magnitude_unit == 0.0);
569549
BOOST_CHECK(claim.m_signature.empty() == true);
570550
}
571551

@@ -650,7 +630,7 @@ BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream_for_researcher)
650630

651631
BOOST_CHECK(claim.m_research_subsidy == expected.m_research_subsidy);
652632
BOOST_CHECK(claim.m_magnitude == 0.0);
653-
BOOST_CHECK(comp_double(claim.m_magnitude_unit, 0.0));
633+
BOOST_CHECK(claim.m_magnitude_unit == 0.0);
654634
BOOST_CHECK(claim.m_signature == expected.m_signature);
655635

656636
BOOST_CHECK(claim.m_quorum_hash == expected.m_quorum_hash);
@@ -690,7 +670,7 @@ BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream_for_researcher_with_superbloc
690670

691671
BOOST_CHECK(claim.m_research_subsidy == expected.m_research_subsidy);
692672
BOOST_CHECK(claim.m_magnitude == 0.0);
693-
BOOST_CHECK(comp_double(claim.m_magnitude_unit, 0.0));
673+
BOOST_CHECK(claim.m_magnitude_unit == 0.0);
694674
BOOST_CHECK(claim.m_signature == expected.m_signature);
695675

696676
BOOST_CHECK(claim.m_quorum_hash == expected.m_quorum_hash);

src/test/gridcoin/researcher_tests.cpp

Lines changed: 24 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -183,26 +183,6 @@ void AddProtocolEntry(const uint32_t& payload_version, const std::string& key, c
183183

184184
registry.Add({contract, dummy_tx, &dummy_index});
185185
}
186-
187-
// Unfortunately, GCC 13 on openSUSE i386 is misbehaving and exhibiting weird errors in the last decimal places for things
188-
// even as straightforward as
189-
//
190-
// double foo = 0.0;
191-
// text >> foo.
192-
//
193-
// This comparison function works around that by allowing a small error band to pass the tests, but not enough to invalidate
194-
// the tests on compilers that work.
195-
bool comp_double(double lhs, double rhs)
196-
{
197-
// Require exact match if 0=0.
198-
if (std::min(lhs, rhs) == 0.0) {
199-
return (lhs == rhs);
200-
} else {
201-
double unsigned_rel_error = std::abs(lhs - rhs) / std::min(lhs, rhs);
202-
203-
return (unsigned_rel_error <= double {1e-8});
204-
}
205-
}
206186
} // anonymous namespace
207187

208188
// -----------------------------------------------------------------------------
@@ -225,7 +205,7 @@ BOOST_AUTO_TEST_CASE(it_initializes_with_project_data)
225205
BOOST_CHECK(project.m_cpid == expected);
226206
BOOST_CHECK(project.m_team == "team name");
227207
BOOST_CHECK(project.m_url == "url");
228-
BOOST_CHECK(comp_double(project.m_rac, 0.0));
208+
BOOST_CHECK(project.m_rac == 0.0);
229209
BOOST_CHECK(project.m_error == GRC::MiningProject::Error::NONE);
230210
}
231211

@@ -254,7 +234,7 @@ BOOST_AUTO_TEST_CASE(it_parses_a_project_xml_string)
254234
BOOST_CHECK(project.m_cpid == cpid);
255235
BOOST_CHECK(project.m_team == "team name");
256236
BOOST_CHECK(project.m_url == "https://example.com/");
257-
BOOST_CHECK(comp_double(project.m_rac, 123.45));
237+
BOOST_CHECK(project.m_rac == 123.45);
258238
BOOST_CHECK(project.m_error == GRC::MiningProject::Error::NONE);
259239

260240
// Clean up:
@@ -289,7 +269,7 @@ BOOST_AUTO_TEST_CASE(it_falls_back_to_compute_a_missing_external_cpid)
289269
BOOST_CHECK(project.m_cpid == cpid);
290270
BOOST_CHECK(project.m_team == "team name");
291271
BOOST_CHECK(project.m_url == "https://example.com/");
292-
BOOST_CHECK(comp_double(project.m_rac, 123.45));
272+
BOOST_CHECK(project.m_rac == 123.45);
293273
BOOST_CHECK(project.m_error == GRC::MiningProject::Error::NONE);
294274

295275
// Clean up:
@@ -508,7 +488,7 @@ BOOST_AUTO_TEST_CASE(it_parses_a_set_of_project_xml_sections)
508488
BOOST_CHECK(project1->m_cpid == cpid_1);
509489
BOOST_CHECK(project1->m_team == "gridcoin");
510490
BOOST_CHECK(project1->m_url == "https://example.com/1");
511-
BOOST_CHECK(comp_double(project1->m_rac, 123.45));
491+
BOOST_CHECK(project1->m_rac == 123.45);
512492
BOOST_CHECK(project1->m_error == GRC::MiningProject::Error::NONE);
513493
BOOST_CHECK(project1->Eligible() == true);
514494
} else {
@@ -520,7 +500,7 @@ BOOST_AUTO_TEST_CASE(it_parses_a_set_of_project_xml_sections)
520500
BOOST_CHECK(project2->m_cpid == cpid_2);
521501
BOOST_CHECK(project2->m_team == "gridcoin");
522502
BOOST_CHECK(project2->m_url == "https://example.com/2");
523-
BOOST_CHECK(comp_double(project2->m_rac, 567.89));
503+
BOOST_CHECK(project2->m_rac == 567.89);
524504
BOOST_CHECK(project2->m_error == GRC::MiningProject::Error::NONE);
525505
BOOST_CHECK(project2->Eligible() == true);
526506
} else {
@@ -875,7 +855,7 @@ BOOST_AUTO_TEST_CASE(it_parses_project_xml_to_a_global_researcher_singleton)
875855
BOOST_CHECK(project1->m_cpid == cpid_1);
876856
BOOST_CHECK(project1->m_team == "gridcoin");
877857
BOOST_CHECK(project1->m_url == "https://example.com/1");
878-
BOOST_CHECK(comp_double(project1->m_rac, 1.1));
858+
BOOST_CHECK(project1->m_rac == 1.1);
879859
BOOST_CHECK(project1->m_error == GRC::MiningProject::Error::NONE);
880860
BOOST_CHECK(project1->Eligible() == true);
881861
} else {
@@ -887,7 +867,7 @@ BOOST_AUTO_TEST_CASE(it_parses_project_xml_to_a_global_researcher_singleton)
887867
BOOST_CHECK(project2->m_cpid == cpid_2);
888868
BOOST_CHECK(project2->m_team == "gridcoin");
889869
BOOST_CHECK(project2->m_url == "https://example.com/2");
890-
BOOST_CHECK(comp_double(project2->m_rac, 2.2));
870+
BOOST_CHECK(project2->m_rac == 2.2);
891871
BOOST_CHECK(project2->m_error == GRC::MiningProject::Error::NONE);
892872
BOOST_CHECK(project2->Eligible() == true);
893873
} else {
@@ -929,7 +909,7 @@ BOOST_AUTO_TEST_CASE(it_looks_up_loaded_boinc_projects_by_name)
929909
BOOST_CHECK(project->m_cpid == cpid);
930910
BOOST_CHECK(project->m_team == "gridcoin");
931911
BOOST_CHECK(project->m_url == "https://example.com/");
932-
BOOST_CHECK(comp_double(project->m_rac, 1.1));
912+
BOOST_CHECK(project->m_rac == 1.1);
933913
BOOST_CHECK(project->m_error == GRC::MiningProject::Error::NONE);
934914
BOOST_CHECK(project->Eligible() == true);
935915
} else {
@@ -1068,7 +1048,7 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml)
10681048
BOOST_CHECK(project1->m_name == "project name 1");
10691049
BOOST_CHECK(project1->m_cpid == cpid);
10701050
BOOST_CHECK(project1->m_team == "not gridcoin");
1071-
BOOST_CHECK(comp_double(project1->m_rac, 1.1));
1051+
BOOST_CHECK(project1->m_rac == 1.1);
10721052
BOOST_CHECK(project1->m_error == GRC::MiningProject::Error::INVALID_TEAM);
10731053
BOOST_CHECK(project1->Eligible() == false);
10741054
} else {
@@ -1079,7 +1059,7 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml)
10791059
BOOST_CHECK(project2->m_name == "project name 2");
10801060
BOOST_CHECK(project2->m_cpid == cpid);
10811061
BOOST_CHECK(project2->m_team.empty() == true);
1082-
BOOST_CHECK(comp_double(project2->m_rac, 2.2));
1062+
BOOST_CHECK(project2->m_rac == 2.2);
10831063
BOOST_CHECK(project2->m_error == GRC::MiningProject::Error::INVALID_TEAM);
10841064
BOOST_CHECK(project2->Eligible() == false);
10851065
} else {
@@ -1090,7 +1070,7 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml)
10901070
BOOST_CHECK(project3->m_name == "project name 3");
10911071
BOOST_CHECK(project3->m_cpid == GRC::Cpid());
10921072
BOOST_CHECK(project3->m_team == "gridcoin");
1093-
BOOST_CHECK(comp_double(project3->m_rac, 3.3));
1073+
BOOST_CHECK(project3->m_rac == 3.3);
10941074
BOOST_CHECK(project3->m_error == GRC::MiningProject::Error::MALFORMED_CPID);
10951075
BOOST_CHECK(project3->Eligible() == false);
10961076
} else {
@@ -1101,7 +1081,7 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml)
11011081
BOOST_CHECK(project4->m_name == "project name 4");
11021082
BOOST_CHECK(project4->m_cpid == GRC::Cpid());
11031083
BOOST_CHECK(project4->m_team == "gridcoin");
1104-
BOOST_CHECK(comp_double(project4->m_rac, 4.4));
1084+
BOOST_CHECK(project4->m_rac == 4.4);
11051085
BOOST_CHECK(project4->m_error == GRC::MiningProject::Error::MALFORMED_CPID);
11061086
BOOST_CHECK(project4->Eligible() == false);
11071087
} else {
@@ -1112,7 +1092,7 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml)
11121092
BOOST_CHECK(project5->m_name == "project name 5");
11131093
BOOST_CHECK(project5->m_cpid == cpid);
11141094
BOOST_CHECK(project5->m_team == "gridcoin");
1115-
BOOST_CHECK(comp_double(project5->m_rac, 5.5));
1095+
BOOST_CHECK(project5->m_rac == 5.5);
11161096
BOOST_CHECK(project5->m_error == GRC::MiningProject::Error::MISMATCHED_CPID);
11171097
BOOST_CHECK(project5->Eligible() == false);
11181098
} else {
@@ -1123,7 +1103,7 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml)
11231103
BOOST_CHECK(project6->m_name == "project name 6");
11241104
BOOST_CHECK(project6->m_cpid == cpid);
11251105
BOOST_CHECK(project6->m_team == "gridcoin");
1126-
BOOST_CHECK(comp_double(project6->m_rac, 6.6));
1106+
BOOST_CHECK(project6->m_rac == 6.6);
11271107
BOOST_CHECK(project6->m_error == GRC::MiningProject::Error::MISMATCHED_CPID);
11281108
BOOST_CHECK(project6->Eligible() == false);
11291109
} else {
@@ -1132,7 +1112,7 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml)
11321112

11331113
if (const GRC::ProjectOption project7 = projects.Try("project name 7")) {
11341114
BOOST_CHECK(project7->m_name == "project name 7");
1135-
BOOST_CHECK(comp_double(project7->m_rac, 7.7));
1115+
BOOST_CHECK(project7->m_rac == 7.7);
11361116
BOOST_CHECK(project7->m_error == GRC::MiningProject::Error::POOL);
11371117
BOOST_CHECK(project7->Eligible() == false);
11381118
} else {
@@ -1142,7 +1122,7 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml)
11421122
if (const GRC::ProjectOption project8 = projects.Try("project name 8")) {
11431123
BOOST_CHECK(project8->m_name == "project name 8");
11441124
BOOST_CHECK(project8->m_cpid.IsZero() == true);
1145-
BOOST_CHECK(comp_double(project8->m_rac, 8.8));
1125+
BOOST_CHECK(project8->m_rac == 8.8);
11461126
BOOST_CHECK(project8->m_error == GRC::MiningProject::Error::POOL);
11471127
BOOST_CHECK(project8->Eligible() == false);
11481128
} else {
@@ -1153,7 +1133,7 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml)
11531133
BOOST_CHECK(project9->m_name == "project name 9");
11541134
BOOST_CHECK(project9->m_cpid == cpid);
11551135
BOOST_CHECK(project9->m_team == "not gridcoin");
1156-
BOOST_CHECK(comp_double(project9->m_rac, 0.0));
1136+
BOOST_CHECK(project9->m_rac == 0.0);
11571137
BOOST_CHECK(project9->m_error == GRC::MiningProject::Error::INVALID_TEAM);
11581138
BOOST_CHECK(project9->Eligible() == false);
11591139
} else {
@@ -1232,7 +1212,7 @@ BOOST_AUTO_TEST_CASE(it_skips_the_team_requirement_when_set_by_protocol)
12321212
BOOST_CHECK(project1->m_name == "project name 1");
12331213
BOOST_CHECK(project1->m_cpid == cpid);
12341214
BOOST_CHECK(project1->m_team == "! not gridcoin !");
1235-
BOOST_CHECK(comp_double(project1->m_rac, 1.1));
1215+
BOOST_CHECK(project1->m_rac == 1.1);
12361216
BOOST_CHECK(project1->m_error == GRC::MiningProject::Error::NONE);
12371217
BOOST_CHECK(project1->Eligible() == true);
12381218
} else {
@@ -1302,7 +1282,7 @@ BOOST_AUTO_TEST_CASE(it_applies_the_team_whitelist_when_set_by_the_protocol)
13021282
BOOST_CHECK(project1->m_name == "project name 1");
13031283
BOOST_CHECK(project1->m_cpid == cpid);
13041284
BOOST_CHECK(project1->m_team == "! not gridcoin !");
1305-
BOOST_CHECK(comp_double(project1->m_rac, 1.1));
1285+
BOOST_CHECK(project1->m_rac == 1.1);
13061286
BOOST_CHECK(project1->m_error == GRC::MiningProject::Error::INVALID_TEAM);
13071287
BOOST_CHECK(project1->Eligible() == false);
13081288
} else {
@@ -1313,7 +1293,7 @@ BOOST_AUTO_TEST_CASE(it_applies_the_team_whitelist_when_set_by_the_protocol)
13131293
BOOST_CHECK(project2->m_name == "project name 2");
13141294
BOOST_CHECK(project2->m_cpid == cpid);
13151295
BOOST_CHECK(project2->m_team == "team 1");
1316-
BOOST_CHECK(comp_double(project2->m_rac, 0));
1296+
BOOST_CHECK(project2->m_rac == 0);
13171297
BOOST_CHECK(project2->m_error == GRC::MiningProject::Error::NONE);
13181298
BOOST_CHECK(project2->Eligible() == true);
13191299
} else {
@@ -1324,7 +1304,7 @@ BOOST_AUTO_TEST_CASE(it_applies_the_team_whitelist_when_set_by_the_protocol)
13241304
BOOST_CHECK(project3->m_name == "project name 3");
13251305
BOOST_CHECK(project3->m_cpid == cpid);
13261306
BOOST_CHECK(project3->m_team == "team 2");
1327-
BOOST_CHECK(comp_double(project3->m_rac, 0));
1307+
BOOST_CHECK(project3->m_rac == 0);
13281308
BOOST_CHECK(project3->m_error == GRC::MiningProject::Error::NONE);
13291309
BOOST_CHECK(project3->Eligible() == true);
13301310
} else {
@@ -1649,7 +1629,7 @@ void it_parses_project_xml_from_a_client_state_xml_file()
16491629
BOOST_CHECK(project1->m_name == "valid project 1");
16501630
BOOST_CHECK(project1->m_cpid == cpid_1);
16511631
BOOST_CHECK(project1->m_team == "gridcoin");
1652-
BOOST_CHECK(comp_double(project1->m_rac, 1.1));
1632+
BOOST_CHECK(project1->m_rac == 1.1);
16531633
BOOST_CHECK(project1->m_url == "https://project1.example.com/boinc/");
16541634
BOOST_CHECK(project1->m_error == GRC::MiningProject::Error::NONE);
16551635
BOOST_CHECK(project1->Eligible() == true);
@@ -1661,7 +1641,7 @@ void it_parses_project_xml_from_a_client_state_xml_file()
16611641
BOOST_CHECK(project2->m_name == "valid project 2");
16621642
BOOST_CHECK(project2->m_cpid == cpid_2);
16631643
BOOST_CHECK(project2->m_team == "gridcoin");
1664-
BOOST_CHECK(comp_double(project2->m_rac, 2.2));
1644+
BOOST_CHECK(project2->m_rac == 2.2);
16651645
BOOST_CHECK(project2->m_url == "https://project2.example.com/boinc/");
16661646
BOOST_CHECK(project2->m_error == GRC::MiningProject::Error::NONE);
16671647
BOOST_CHECK(project2->Eligible() == true);
@@ -1674,7 +1654,7 @@ void it_parses_project_xml_from_a_client_state_xml_file()
16741654
BOOST_CHECK(project3->m_name == "invalid project 3");
16751655
BOOST_CHECK(project3->m_cpid == cpid_2);
16761656
BOOST_CHECK(project3->m_team == "gridcoin");
1677-
BOOST_CHECK(comp_double(project3->m_rac, 3.3));
1657+
BOOST_CHECK(project3->m_rac == 3.3);
16781658
BOOST_CHECK(project3->m_url == "https://project3.example.com/boinc/");
16791659
BOOST_CHECK(project3->m_error == GRC::MiningProject::Error::MISMATCHED_CPID);
16801660
BOOST_CHECK(project3->Eligible() == false);

0 commit comments

Comments
 (0)