2019-04-12 12:30:19 +00:00
|
|
|
# Test format: shuffling
|
|
|
|
|
2019-05-06 15:30:32 +00:00
|
|
|
The runner of the Shuffling test type has only one handler: `core`.
|
2019-04-12 12:30:19 +00:00
|
|
|
|
2019-05-06 15:30:32 +00:00
|
|
|
However, this does not mean that testing is limited.
|
2019-04-12 12:30:19 +00:00
|
|
|
Clients may take different approaches to shuffling, for optimizing,
|
|
|
|
and supporting advanced lookup behavior back in older history.
|
|
|
|
|
|
|
|
For implementers, possible test runners implementing testing can include:
|
2019-05-06 15:30:32 +00:00
|
|
|
1) Just test permute-index, run it for each index `i` in `range(count)`, and check against expected `output[i]` (default spec implementation).
|
|
|
|
2) Test un-permute-index (the reverse lookup; implemented by running the shuffling rounds in reverse, from `round_count-1` to `0`).
|
|
|
|
3) Test the optimized complete shuffle, where all indices are shuffled at once; test output in one go.
|
|
|
|
4) Test complete shuffle in reverse (reverse rounds, same as #2).
|
2019-04-12 12:30:19 +00:00
|
|
|
|
|
|
|
## Test case format
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
seed: bytes32
|
|
|
|
count: int
|
|
|
|
shuffled: List[int]
|
|
|
|
```
|
|
|
|
|
2019-04-15 13:06:01 +00:00
|
|
|
- The `bytes32` is encoded a string, hexadecimal encoding, prefixed with `0x`.
|
2019-04-12 12:30:19 +00:00
|
|
|
- Integers are validator indices. These are `uint64`, but realistically they are not as big.
|
|
|
|
|
|
|
|
The `count` specifies the validator registry size. One should compute the shuffling for indices `0, 1, 2, 3, ..., count (exclusive)`.
|
|
|
|
Seed is the raw shuffling seed, passed to permute-index (or optimized shuffling approach).
|
|
|
|
|
|
|
|
## Condition
|
|
|
|
|
|
|
|
The resulting list should match the expected output `shuffled` after shuffling the implied input, using the given `seed`.
|
|
|
|
|