Back to home page

Project CMSSW displayed by LXR

 
 

    


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 }