Port `GenesisTest`s into new `TestSuite` data structure
The new `ConformanceTest` record contains fields for all data formerly used
to run a test via `forAllGenesisTest` helper, plus other fields that pertain
to its evaluation as a test property on a`TestTree`.
A value of this type is defined for each point-schedule/genesis test.
All such `ConformanceTest`s are arranged in a `TestSuite`s, a data
structure introduced with the goal of eventually exporting them as
part of a new sublibrary for the Conformance Testing of Consensus harness
(see https://github.com/tweag/cardano-conformance-testing-of-consensus).
This data structure is designed to optimize single test lookups,
while retaining the necessary structure to be compiled back to a `TestTree`,
so that the introduced changes preserve the semantics of the
`ouroboros-consensus:test:consensus-diffusion-test` test suite.
To accomplish this, a new data type is introduced in each module as a `key`
for the locally defined `TestSuite`, such that each test in the module
corresponds to a unique value (nullary constructor) of this type. This means
that including a new test in a `TestSuite` requires the extension of such key
type by introducing a new data constructor. These `key` types are aggregated
into higher level key types to reify the nested grouping of the original
tasty `TestTree`s. It is by means of `mkTestSuite` and `at` that a higher
level `TestSuite` can be defined. The `SmallKey key` constraint is needed for
their exhaustive construction, via `newTestSuite` and `mkTestSuite`; as
implemented, a `TestSuite` is a total map.
Co-authored-by: Sandy Maguire <[email protected]>