What's the benefit over BOOST_TEST?
One is used throughout the project:
% rg 'BOOST_CHECK_EQUAL\(' src | wc -l
3673
while the other isn't:
% rg 'BOOST_TEST\([^;]+==' src | wc -l
37
For simple values they both show the same error for the cases I tried...
<details><summary>Error output</summary>
> BOOST_TEST(cache.AccessCoin(outpoint) == coin2);
> BOOST_CHECK_EQUAL(cache.AccessCoin(outpoint), coin2);
test/coins_tests.cpp:1120: error: in "coins_tests/ccoins_addcoin_exception_keeps_usage_balanced": check cache.AccessCoin(outpoint) == coin2 has failed [Coin(spent=0, coinbase=0, height=1, value=4, scriptPubKey=25a0ed9994a2fea19823d9383e72c2ff13de62741338329401ebc9cbf661c2a280a6e61fe73f) != Coin(spent=0, coinbase=0, height=2, value=19, scriptPubKey=268bbfd02574fc17eacbd75786472ac43290da5cbd78836d75142252f36c717d725feff56ec773)]
</details>
... but I strongly dislike surprises and C++ and compiler magic (isn't that why we wanna get rid of boost in the first place?). While BOOST_CHECK_EQUAL(a, b) receives two separate macro arguments that can be compared and printed, BOOST_TEST(a == b) receives one expression, then uses C++ operator overloading and expression templates to capture its operands separately.
For example, migrating https://github.com/bitcoin/bitcoin/blob/e550945a3941e31c8a31983fdce29c11e584bea1/src/test/txgraph_tests.cpp#L300 to BOOST_TEST doesn't even compile without extra grouping.
Even worse, if we try to inject a bug in https://github.com/bitcoin/bitcoin/blob/e550945a3941e31c8a31983fdce29c11e584bea1/src/test/txgraph_tests.cpp#L88
BOOST_CHECK_EQUAL(graph->Exists(refs[i], TxGraph::Level::TOP), i != NUM_BOTTOM_TX);
it fails with:
test/txgraph_tests.cpp:88: error: in "txgraph_tests/txgraph_trim_zigzag": check graph->Exists(refs[i], TxGraph::Level::TOP) == i != NUM_BOTTOM_TX has failed [true != false]
but the same would just pass with BOOST_TEST because the final != compares the preceding boolean result with NUM_BOTTOM_TX:
BOOST_TEST(graph->Exists(refs[i], TxGraph::Level::TOP) == i != NUM_BOTTOM_TX);
BOOST_CHECK_EQUAL is verbose and ugly, but it's what we already use and BOOST_TEST has more surprises.
If we want to migrate to BOOST_TEST anyway, let's not start it covertly in this PR, but have a dedicated migration PR with proper reasoning for why we would want that.