File indexing completed on 2025-07-31 02:19:09
0001 #include "catch.hpp"
0002
0003 #include <algorithm>
0004 #include <ranges>
0005 #include <vector>
0006
0007 #include "DataFormats/Provenance/interface/Hash.h"
0008 #include "FWCore/Utilities/interface/Digest.h"
0009
0010 namespace {
0011 using TestHash = edm::Hash<100>;
0012 }
0013
0014 TEST_CASE("Hash", "[Hash]") {
0015 SECTION("Default construction is invalid") { REQUIRE(TestHash{}.isValid() == false); }
0016
0017 SECTION("Basic operations") {
0018 cms::Digest d("foo");
0019 auto result = d.digest().toString();
0020
0021 TestHash id{result};
0022 REQUIRE(id.isValid() == true);
0023 {
0024 std::string idString;
0025 id.toString(idString);
0026 REQUIRE(idString == result);
0027 }
0028
0029 TestHash id2 = id;
0030 REQUIRE(id2.isValid() == true);
0031 {
0032 std::string id2String;
0033 id2.toString(id2String);
0034 REQUIRE(id2String == result);
0035 }
0036
0037 cms::Digest b("bar");
0038 auto diffResult = b.digest().toString();
0039 REQUIRE(id2 == TestHash{result});
0040 REQUIRE(id2 != TestHash{diffResult});
0041
0042 REQUIRE(id2 > TestHash{diffResult});
0043 REQUIRE(TestHash{diffResult} < id2);
0044
0045 REQUIRE(not(id2 < id2));
0046 }
0047
0048 SECTION("std::ranges::sort") {
0049 std::vector<TestHash> container{TestHash{cms::Digest("foo").digest().toString()},
0050 TestHash{cms::Digest("bar").digest().toString()},
0051 TestHash{cms::Digest("fred").digest().toString()},
0052 TestHash{cms::Digest("wilma").digest().toString()}};
0053 CHECK(container[0] > container[1]);
0054 CHECK(container[1] < container[2]);
0055 CHECK(container[2] > container[3]);
0056
0057 std::ranges::sort(container);
0058 CHECK(container[0] < container[1]);
0059 CHECK(container[1] < container[2]);
0060 CHECK(container[2] < container[3]);
0061 }
0062 }