///|
/// A built-in recovery scenario used by the conformance suite.
pub(all) struct ResilientScenario {
name : String
deck : String
seed : Int
payload_len : Int
data_count : Int
parity_count : Int
missing_indices : Array[Int]
expected_recovery : Bool
} derive(Eq, @debug.Debug)
///|
/// Result produced after running one recovery scenario.
pub(all) struct ScenarioRun {
name : String
expected_recovery : Bool
actual_recovery : Bool
recovered_matches : Bool
reported_missing : Array[Int]
payload_len : Int
fingerprint : String
message : String
} derive(Eq, @debug.Debug)
///|
/// Build the deterministic payload for one scenario.
pub fn scenario_payload(scenario : ResilientScenario) -> Array[Int] {
deterministic_payload(scenario.seed, scenario.payload_len)
}
///|
/// Run one scenario through the full resilient encoder and decoder.
pub fn run_resilient_scenario(scenario : ResilientScenario) -> ScenarioRun {
let payload = scenario_payload(scenario)
let cards = weave_resilient(
scenario.deck,
payload,
scenario.data_count,
scenario.parity_count,
)
let partial = drop_resilient_indices(cards, scenario.missing_indices)
match recover_resilient(partial) {
ResilientRestored(restored) => {
let mismatches = payload_diff_offsets(payload, restored)
{
name: scenario.name,
expected_recovery: scenario.expected_recovery,
actual_recovery: true,
recovered_matches: mismatches.length() == 0,
reported_missing: [],
payload_len: payload.length(),
fingerprint: payload_fingerprint(payload),
message: "restored",
}
}
ResilientNeedCards(missing) =>
{
name: scenario.name,
expected_recovery: scenario.expected_recovery,
actual_recovery: false,
recovered_matches: false,
reported_missing: missing,
payload_len: payload.length(),
fingerprint: payload_fingerprint(payload),
message: "need cards",
}
ResilientDamaged(message) =>
{
name: scenario.name,
expected_recovery: scenario.expected_recovery,
actual_recovery: false,
recovered_matches: false,
reported_missing: [],
payload_len: payload.length(),
fingerprint: payload_fingerprint(payload),
message,
}
}
}
///|
/// Return true if one scenario run matches its expected outcome.
pub fn scenario_passes(run : ScenarioRun) -> Bool {
if run.expected_recovery {
run.actual_recovery && run.recovered_matches
} else {
!run.actual_recovery
}
}
///|
/// Run the built-in conformance catalog.
pub fn run_builtin_resilient_scenarios() -> Array[ScenarioRun] {
let runs : Array[ScenarioRun] = []
for scenario in builtin_resilient_scenarios() {
runs.push(run_resilient_scenario(scenario))
}
runs
}
///|
/// Count passing scenarios in the built-in catalog.
pub fn count_passing_builtin_scenarios() -> Int {
let mut count = 0
for run in run_builtin_resilient_scenarios() {
if scenario_passes(run) {
count = count + 1
}
}
count
}
///|
/// Count scenarios that are expected to recover.
pub fn count_expected_recoverable_scenarios() -> Int {
let mut count = 0
for scenario in builtin_resilient_scenarios() {
if scenario.expected_recovery {
count = count + 1
}
}
count
}
///|
/// Count scenarios that are expected to ask for more evidence.
pub fn count_expected_blocked_scenarios() -> Int {
let mut count = 0
for scenario in builtin_resilient_scenarios() {
if !scenario.expected_recovery {
count = count + 1
}
}
count
}
///|
/// Render a short scenario report for CLI output and review notes.
pub fn render_scenario_report(max_rows : Int) -> String {
let runs = run_builtin_resilient_scenarios()
let take = clamp(max_rows, 0, runs.length())
let lines : Array[String] = [
"# resilient scenario report",
"total=" + runs.length().to_string(),
"passed=" + count_passing_builtin_scenarios().to_string(),
"expected-recoverable=" + count_expected_recoverable_scenarios().to_string(),
"expected-blocked=" + count_expected_blocked_scenarios().to_string(),
]
for i in 0.. Array[ResilientScenario] {
[
scenario_001(),
scenario_002(),
scenario_003(),
scenario_004(),
scenario_005(),
scenario_006(),
scenario_007(),
scenario_008(),
scenario_009(),
scenario_010(),
scenario_011(),
scenario_012(),
scenario_013(),
scenario_014(),
scenario_015(),
scenario_016(),
scenario_017(),
scenario_018(),
scenario_019(),
scenario_020(),
scenario_021(),
scenario_022(),
scenario_023(),
scenario_024(),
scenario_025(),
scenario_026(),
scenario_027(),
scenario_028(),
scenario_029(),
scenario_030(),
scenario_031(),
scenario_032(),
scenario_033(),
scenario_034(),
scenario_035(),
scenario_036(),
scenario_037(),
scenario_038(),
scenario_039(),
scenario_040(),
scenario_041(),
scenario_042(),
scenario_043(),
scenario_044(),
scenario_045(),
scenario_046(),
scenario_047(),
scenario_048(),
scenario_049(),
scenario_050(),
scenario_051(),
scenario_052(),
scenario_053(),
scenario_054(),
scenario_055(),
scenario_056(),
scenario_057(),
scenario_058(),
scenario_059(),
scenario_060(),
scenario_061(),
scenario_062(),
scenario_063(),
scenario_064(),
scenario_065(),
scenario_066(),
scenario_067(),
scenario_068(),
scenario_069(),
scenario_070(),
scenario_071(),
scenario_072(),
scenario_073(),
scenario_074(),
scenario_075(),
scenario_076(),
scenario_077(),
scenario_078(),
scenario_079(),
scenario_080(),
scenario_081(),
scenario_082(),
scenario_083(),
scenario_084(),
scenario_085(),
scenario_086(),
scenario_087(),
scenario_088(),
scenario_089(),
scenario_090(),
scenario_091(),
scenario_092(),
scenario_093(),
scenario_094(),
scenario_095(),
scenario_096(),
scenario_097(),
scenario_098(),
scenario_099(),
scenario_100(),
scenario_101(),
scenario_102(),
scenario_103(),
scenario_104(),
scenario_105(),
scenario_106(),
scenario_107(),
scenario_108(),
scenario_109(),
scenario_110(),
scenario_111(),
scenario_112(),
scenario_113(),
scenario_114(),
scenario_115(),
scenario_116(),
scenario_117(),
scenario_118(),
scenario_119(),
scenario_120(),
]
}
///|
fn render_scenario_run(run : ScenarioRun) -> String {
run.name +
" expected=" +
run.expected_recovery.to_string() +
" actual=" +
run.actual_recovery.to_string() +
" match=" +
run.recovered_matches.to_string() +
" missing=" +
render_ints_inline(run.reported_missing) +
" fp=" +
run.fingerprint +
" message=" +
run.message
}
///|
fn scenario_001() -> ResilientScenario {
{
name: "scenario-001",
deck: "scenario-001",
seed: 50,
payload_len: 30,
data_count: 7,
parity_count: 2,
missing_indices: [1, 2],
expected_recovery: true,
}
}
///|
fn scenario_002() -> ResilientScenario {
{
name: "scenario-002",
deck: "scenario-002",
seed: 87,
payload_len: 41,
data_count: 8,
parity_count: 3,
missing_indices: [2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_003() -> ResilientScenario {
{
name: "scenario-003",
deck: "scenario-003",
seed: 124,
payload_len: 52,
data_count: 9,
parity_count: 4,
missing_indices: [3, 4, 5, 6],
expected_recovery: true,
}
}
///|
fn scenario_004() -> ResilientScenario {
{
name: "scenario-004",
deck: "scenario-004",
seed: 161,
payload_len: 63,
data_count: 10,
parity_count: 1,
missing_indices: [4],
expected_recovery: true,
}
}
///|
fn scenario_005() -> ResilientScenario {
{
name: "scenario-005",
deck: "scenario-005",
seed: 198,
payload_len: 74,
data_count: 11,
parity_count: 2,
missing_indices: [5, 6, 7],
expected_recovery: false,
}
}
///|
fn scenario_006() -> ResilientScenario {
{
name: "scenario-006",
deck: "scenario-006",
seed: 235,
payload_len: 85,
data_count: 12,
parity_count: 3,
missing_indices: [6, 7, 8],
expected_recovery: true,
}
}
///|
fn scenario_007() -> ResilientScenario {
{
name: "scenario-007",
deck: "scenario-007",
seed: 21,
payload_len: 96,
data_count: 6,
parity_count: 4,
missing_indices: [1, 2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_008() -> ResilientScenario {
{
name: "scenario-008",
deck: "scenario-008",
seed: 58,
payload_len: 107,
data_count: 7,
parity_count: 1,
missing_indices: [1],
expected_recovery: true,
}
}
///|
fn scenario_009() -> ResilientScenario {
{
name: "scenario-009",
deck: "scenario-009",
seed: 95,
payload_len: 118,
data_count: 8,
parity_count: 2,
missing_indices: [2, 3],
expected_recovery: true,
}
}
///|
fn scenario_010() -> ResilientScenario {
{
name: "scenario-010",
deck: "scenario-010",
seed: 132,
payload_len: 129,
data_count: 9,
parity_count: 3,
missing_indices: [4, 5, 6, 7],
expected_recovery: false,
}
}
///|
fn scenario_011() -> ResilientScenario {
{
name: "scenario-011",
deck: "scenario-011",
seed: 169,
payload_len: 140,
data_count: 10,
parity_count: 4,
missing_indices: [4, 5, 6, 7],
expected_recovery: true,
}
}
///|
fn scenario_012() -> ResilientScenario {
{
name: "scenario-012",
deck: "scenario-012",
seed: 206,
payload_len: 151,
data_count: 11,
parity_count: 1,
missing_indices: [1],
expected_recovery: true,
}
}
///|
fn scenario_013() -> ResilientScenario {
{
name: "scenario-013",
deck: "scenario-013",
seed: 243,
payload_len: 162,
data_count: 12,
parity_count: 2,
missing_indices: [2, 3],
expected_recovery: true,
}
}
///|
fn scenario_014() -> ResilientScenario {
{
name: "scenario-014",
deck: "scenario-014",
seed: 29,
payload_len: 173,
data_count: 6,
parity_count: 3,
missing_indices: [2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_015() -> ResilientScenario {
{
name: "scenario-015",
deck: "scenario-015",
seed: 66,
payload_len: 184,
data_count: 7,
parity_count: 4,
missing_indices: [0, 1, 2, 3, 4],
expected_recovery: false,
}
}
///|
fn scenario_016() -> ResilientScenario {
{
name: "scenario-016",
deck: "scenario-016",
seed: 103,
payload_len: 195,
data_count: 8,
parity_count: 1,
missing_indices: [0],
expected_recovery: true,
}
}
///|
fn scenario_017() -> ResilientScenario {
{
name: "scenario-017",
deck: "scenario-017",
seed: 140,
payload_len: 206,
data_count: 9,
parity_count: 2,
missing_indices: [1, 2],
expected_recovery: true,
}
}
///|
fn scenario_018() -> ResilientScenario {
{
name: "scenario-018",
deck: "scenario-018",
seed: 177,
payload_len: 217,
data_count: 10,
parity_count: 3,
missing_indices: [2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_019() -> ResilientScenario {
{
name: "scenario-019",
deck: "scenario-019",
seed: 214,
payload_len: 228,
data_count: 11,
parity_count: 4,
missing_indices: [3, 4, 5, 6],
expected_recovery: true,
}
}
///|
fn scenario_020() -> ResilientScenario {
{
name: "scenario-020",
deck: "scenario-020",
seed: 0,
payload_len: 28,
data_count: 12,
parity_count: 1,
missing_indices: [9, 10],
expected_recovery: false,
}
}
///|
fn scenario_021() -> ResilientScenario {
{
name: "scenario-021",
deck: "scenario-021",
seed: 37,
payload_len: 39,
data_count: 6,
parity_count: 2,
missing_indices: [1, 2],
expected_recovery: true,
}
}
///|
fn scenario_022() -> ResilientScenario {
{
name: "scenario-022",
deck: "scenario-022",
seed: 74,
payload_len: 50,
data_count: 7,
parity_count: 3,
missing_indices: [2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_023() -> ResilientScenario {
{
name: "scenario-023",
deck: "scenario-023",
seed: 111,
payload_len: 61,
data_count: 8,
parity_count: 4,
missing_indices: [3, 4, 5, 6],
expected_recovery: true,
}
}
///|
fn scenario_024() -> ResilientScenario {
{
name: "scenario-024",
deck: "scenario-024",
seed: 148,
payload_len: 72,
data_count: 9,
parity_count: 1,
missing_indices: [6],
expected_recovery: true,
}
}
///|
fn scenario_025() -> ResilientScenario {
{
name: "scenario-025",
deck: "scenario-025",
seed: 185,
payload_len: 83,
data_count: 10,
parity_count: 2,
missing_indices: [1, 2, 3],
expected_recovery: false,
}
}
///|
fn scenario_026() -> ResilientScenario {
{
name: "scenario-026",
deck: "scenario-026",
seed: 222,
payload_len: 94,
data_count: 11,
parity_count: 3,
missing_indices: [8, 9, 10],
expected_recovery: true,
}
}
///|
fn scenario_027() -> ResilientScenario {
{
name: "scenario-027",
deck: "scenario-027",
seed: 8,
payload_len: 105,
data_count: 12,
parity_count: 4,
missing_indices: [0, 1, 2, 3],
expected_recovery: true,
}
}
///|
fn scenario_028() -> ResilientScenario {
{
name: "scenario-028",
deck: "scenario-028",
seed: 45,
payload_len: 116,
data_count: 6,
parity_count: 1,
missing_indices: [4],
expected_recovery: true,
}
}
///|
fn scenario_029() -> ResilientScenario {
{
name: "scenario-029",
deck: "scenario-029",
seed: 82,
payload_len: 127,
data_count: 7,
parity_count: 2,
missing_indices: [5, 6],
expected_recovery: true,
}
}
///|
fn scenario_030() -> ResilientScenario {
{
name: "scenario-030",
deck: "scenario-030",
seed: 119,
payload_len: 138,
data_count: 8,
parity_count: 3,
missing_indices: [0, 1, 2, 3],
expected_recovery: false,
}
}
///|
fn scenario_031() -> ResilientScenario {
{
name: "scenario-031",
deck: "scenario-031",
seed: 156,
payload_len: 149,
data_count: 9,
parity_count: 4,
missing_indices: [1, 2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_032() -> ResilientScenario {
{
name: "scenario-032",
deck: "scenario-032",
seed: 193,
payload_len: 160,
data_count: 10,
parity_count: 1,
missing_indices: [2],
expected_recovery: true,
}
}
///|
fn scenario_033() -> ResilientScenario {
{
name: "scenario-033",
deck: "scenario-033",
seed: 230,
payload_len: 171,
data_count: 11,
parity_count: 2,
missing_indices: [3, 4],
expected_recovery: true,
}
}
///|
fn scenario_034() -> ResilientScenario {
{
name: "scenario-034",
deck: "scenario-034",
seed: 16,
payload_len: 182,
data_count: 12,
parity_count: 3,
missing_indices: [4, 5, 6],
expected_recovery: true,
}
}
///|
fn scenario_035() -> ResilientScenario {
{
name: "scenario-035",
deck: "scenario-035",
seed: 53,
payload_len: 193,
data_count: 6,
parity_count: 4,
missing_indices: [1, 2, 3, 4, 5],
expected_recovery: false,
}
}
///|
fn scenario_036() -> ResilientScenario {
{
name: "scenario-036",
deck: "scenario-036",
seed: 90,
payload_len: 204,
data_count: 7,
parity_count: 1,
missing_indices: [1],
expected_recovery: true,
}
}
///|
fn scenario_037() -> ResilientScenario {
{
name: "scenario-037",
deck: "scenario-037",
seed: 127,
payload_len: 215,
data_count: 8,
parity_count: 2,
missing_indices: [2, 3],
expected_recovery: true,
}
}
///|
fn scenario_038() -> ResilientScenario {
{
name: "scenario-038",
deck: "scenario-038",
seed: 164,
payload_len: 226,
data_count: 9,
parity_count: 3,
missing_indices: [3, 4, 5],
expected_recovery: true,
}
}
///|
fn scenario_039() -> ResilientScenario {
{
name: "scenario-039",
deck: "scenario-039",
seed: 201,
payload_len: 26,
data_count: 10,
parity_count: 4,
missing_indices: [4, 5, 6, 7],
expected_recovery: true,
}
}
///|
fn scenario_040() -> ResilientScenario {
{
name: "scenario-040",
deck: "scenario-040",
seed: 238,
payload_len: 37,
data_count: 11,
parity_count: 1,
missing_indices: [0, 1],
expected_recovery: false,
}
}
///|
fn scenario_041() -> ResilientScenario {
{
name: "scenario-041",
deck: "scenario-041",
seed: 24,
payload_len: 48,
data_count: 12,
parity_count: 2,
missing_indices: [8, 9],
expected_recovery: true,
}
}
///|
fn scenario_042() -> ResilientScenario {
{
name: "scenario-042",
deck: "scenario-042",
seed: 61,
payload_len: 59,
data_count: 6,
parity_count: 3,
missing_indices: [2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_043() -> ResilientScenario {
{
name: "scenario-043",
deck: "scenario-043",
seed: 98,
payload_len: 70,
data_count: 7,
parity_count: 4,
missing_indices: [3, 4, 5, 6],
expected_recovery: true,
}
}
///|
fn scenario_044() -> ResilientScenario {
{
name: "scenario-044",
deck: "scenario-044",
seed: 135,
payload_len: 81,
data_count: 8,
parity_count: 1,
missing_indices: [4],
expected_recovery: true,
}
}
///|
fn scenario_045() -> ResilientScenario {
{
name: "scenario-045",
deck: "scenario-045",
seed: 172,
payload_len: 92,
data_count: 9,
parity_count: 2,
missing_indices: [3, 4, 5],
expected_recovery: false,
}
}
///|
fn scenario_046() -> ResilientScenario {
{
name: "scenario-046",
deck: "scenario-046",
seed: 209,
payload_len: 103,
data_count: 10,
parity_count: 3,
missing_indices: [6, 7, 8],
expected_recovery: true,
}
}
///|
fn scenario_047() -> ResilientScenario {
{
name: "scenario-047",
deck: "scenario-047",
seed: 246,
payload_len: 114,
data_count: 11,
parity_count: 4,
missing_indices: [7, 8, 9, 10],
expected_recovery: true,
}
}
///|
fn scenario_048() -> ResilientScenario {
{
name: "scenario-048",
deck: "scenario-048",
seed: 32,
payload_len: 125,
data_count: 12,
parity_count: 1,
missing_indices: [0],
expected_recovery: true,
}
}
///|
fn scenario_049() -> ResilientScenario {
{
name: "scenario-049",
deck: "scenario-049",
seed: 69,
payload_len: 136,
data_count: 6,
parity_count: 2,
missing_indices: [4, 5],
expected_recovery: true,
}
}
///|
fn scenario_050() -> ResilientScenario {
{
name: "scenario-050",
deck: "scenario-050",
seed: 106,
payload_len: 147,
data_count: 7,
parity_count: 3,
missing_indices: [2, 3, 4, 5],
expected_recovery: false,
}
}
///|
fn scenario_051() -> ResilientScenario {
{
name: "scenario-051",
deck: "scenario-051",
seed: 143,
payload_len: 158,
data_count: 8,
parity_count: 4,
missing_indices: [1, 2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_052() -> ResilientScenario {
{
name: "scenario-052",
deck: "scenario-052",
seed: 180,
payload_len: 169,
data_count: 9,
parity_count: 1,
missing_indices: [7],
expected_recovery: true,
}
}
///|
fn scenario_053() -> ResilientScenario {
{
name: "scenario-053",
deck: "scenario-053",
seed: 217,
payload_len: 180,
data_count: 10,
parity_count: 2,
missing_indices: [8, 9],
expected_recovery: true,
}
}
///|
fn scenario_054() -> ResilientScenario {
{
name: "scenario-054",
deck: "scenario-054",
seed: 3,
payload_len: 191,
data_count: 11,
parity_count: 3,
missing_indices: [0, 1, 2],
expected_recovery: true,
}
}
///|
fn scenario_055() -> ResilientScenario {
{
name: "scenario-055",
deck: "scenario-055",
seed: 40,
payload_len: 202,
data_count: 12,
parity_count: 4,
missing_indices: [7, 8, 9, 10, 11],
expected_recovery: false,
}
}
///|
fn scenario_056() -> ResilientScenario {
{
name: "scenario-056",
deck: "scenario-056",
seed: 77,
payload_len: 213,
data_count: 6,
parity_count: 1,
missing_indices: [2],
expected_recovery: true,
}
}
///|
fn scenario_057() -> ResilientScenario {
{
name: "scenario-057",
deck: "scenario-057",
seed: 114,
payload_len: 224,
data_count: 7,
parity_count: 2,
missing_indices: [3, 4],
expected_recovery: true,
}
}
///|
fn scenario_058() -> ResilientScenario {
{
name: "scenario-058",
deck: "scenario-058",
seed: 151,
payload_len: 24,
data_count: 8,
parity_count: 3,
missing_indices: [4, 5, 6],
expected_recovery: true,
}
}
///|
fn scenario_059() -> ResilientScenario {
{
name: "scenario-059",
deck: "scenario-059",
seed: 188,
payload_len: 35,
data_count: 9,
parity_count: 4,
missing_indices: [5, 6, 7, 8],
expected_recovery: true,
}
}
///|
fn scenario_060() -> ResilientScenario {
{
name: "scenario-060",
deck: "scenario-060",
seed: 225,
payload_len: 46,
data_count: 10,
parity_count: 1,
missing_indices: [6, 7],
expected_recovery: false,
}
}
///|
fn scenario_061() -> ResilientScenario {
{
name: "scenario-061",
deck: "scenario-061",
seed: 11,
payload_len: 57,
data_count: 11,
parity_count: 2,
missing_indices: [1, 2],
expected_recovery: true,
}
}
///|
fn scenario_062() -> ResilientScenario {
{
name: "scenario-062",
deck: "scenario-062",
seed: 48,
payload_len: 68,
data_count: 12,
parity_count: 3,
missing_indices: [2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_063() -> ResilientScenario {
{
name: "scenario-063",
deck: "scenario-063",
seed: 85,
payload_len: 79,
data_count: 6,
parity_count: 4,
missing_indices: [0, 1, 2, 3],
expected_recovery: true,
}
}
///|
fn scenario_064() -> ResilientScenario {
{
name: "scenario-064",
deck: "scenario-064",
seed: 122,
payload_len: 90,
data_count: 7,
parity_count: 1,
missing_indices: [1],
expected_recovery: true,
}
}
///|
fn scenario_065() -> ResilientScenario {
{
name: "scenario-065",
deck: "scenario-065",
seed: 159,
payload_len: 101,
data_count: 8,
parity_count: 2,
missing_indices: [5, 6, 7],
expected_recovery: false,
}
}
///|
fn scenario_066() -> ResilientScenario {
{
name: "scenario-066",
deck: "scenario-066",
seed: 196,
payload_len: 112,
data_count: 9,
parity_count: 3,
missing_indices: [3, 4, 5],
expected_recovery: true,
}
}
///|
fn scenario_067() -> ResilientScenario {
{
name: "scenario-067",
deck: "scenario-067",
seed: 233,
payload_len: 123,
data_count: 10,
parity_count: 4,
missing_indices: [4, 5, 6, 7],
expected_recovery: true,
}
}
///|
fn scenario_068() -> ResilientScenario {
{
name: "scenario-068",
deck: "scenario-068",
seed: 19,
payload_len: 134,
data_count: 11,
parity_count: 1,
missing_indices: [2],
expected_recovery: true,
}
}
///|
fn scenario_069() -> ResilientScenario {
{
name: "scenario-069",
deck: "scenario-069",
seed: 56,
payload_len: 145,
data_count: 12,
parity_count: 2,
missing_indices: [3, 4],
expected_recovery: true,
}
}
///|
fn scenario_070() -> ResilientScenario {
{
name: "scenario-070",
deck: "scenario-070",
seed: 93,
payload_len: 156,
data_count: 6,
parity_count: 3,
missing_indices: [1, 2, 3, 4],
expected_recovery: false,
}
}
///|
fn scenario_071() -> ResilientScenario {
{
name: "scenario-071",
deck: "scenario-071",
seed: 130,
payload_len: 167,
data_count: 7,
parity_count: 4,
missing_indices: [3, 4, 5, 6],
expected_recovery: true,
}
}
///|
fn scenario_072() -> ResilientScenario {
{
name: "scenario-072",
deck: "scenario-072",
seed: 167,
payload_len: 178,
data_count: 8,
parity_count: 1,
missing_indices: [0],
expected_recovery: true,
}
}
///|
fn scenario_073() -> ResilientScenario {
{
name: "scenario-073",
deck: "scenario-073",
seed: 204,
payload_len: 189,
data_count: 9,
parity_count: 2,
missing_indices: [1, 2],
expected_recovery: true,
}
}
///|
fn scenario_074() -> ResilientScenario {
{
name: "scenario-074",
deck: "scenario-074",
seed: 241,
payload_len: 200,
data_count: 10,
parity_count: 3,
missing_indices: [2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_075() -> ResilientScenario {
{
name: "scenario-075",
deck: "scenario-075",
seed: 27,
payload_len: 211,
data_count: 11,
parity_count: 4,
missing_indices: [5, 6, 7, 8, 9],
expected_recovery: false,
}
}
///|
fn scenario_076() -> ResilientScenario {
{
name: "scenario-076",
deck: "scenario-076",
seed: 64,
payload_len: 222,
data_count: 12,
parity_count: 1,
missing_indices: [4],
expected_recovery: true,
}
}
///|
fn scenario_077() -> ResilientScenario {
{
name: "scenario-077",
deck: "scenario-077",
seed: 101,
payload_len: 22,
data_count: 6,
parity_count: 2,
missing_indices: [2, 3],
expected_recovery: true,
}
}
///|
fn scenario_078() -> ResilientScenario {
{
name: "scenario-078",
deck: "scenario-078",
seed: 138,
payload_len: 33,
data_count: 7,
parity_count: 3,
missing_indices: [3, 4, 5],
expected_recovery: true,
}
}
///|
fn scenario_079() -> ResilientScenario {
{
name: "scenario-079",
deck: "scenario-079",
seed: 175,
payload_len: 44,
data_count: 8,
parity_count: 4,
missing_indices: [4, 5, 6, 7],
expected_recovery: true,
}
}
///|
fn scenario_080() -> ResilientScenario {
{
name: "scenario-080",
deck: "scenario-080",
seed: 212,
payload_len: 55,
data_count: 9,
parity_count: 1,
missing_indices: [0, 1],
expected_recovery: false,
}
}
///|
fn scenario_081() -> ResilientScenario {
{
name: "scenario-081",
deck: "scenario-081",
seed: 249,
payload_len: 66,
data_count: 10,
parity_count: 2,
missing_indices: [0, 1],
expected_recovery: true,
}
}
///|
fn scenario_082() -> ResilientScenario {
{
name: "scenario-082",
deck: "scenario-082",
seed: 35,
payload_len: 77,
data_count: 11,
parity_count: 3,
missing_indices: [1, 2, 3],
expected_recovery: true,
}
}
///|
fn scenario_083() -> ResilientScenario {
{
name: "scenario-083",
deck: "scenario-083",
seed: 72,
payload_len: 88,
data_count: 12,
parity_count: 4,
missing_indices: [2, 3, 4, 5],
expected_recovery: true,
}
}
///|
fn scenario_084() -> ResilientScenario {
{
name: "scenario-084",
deck: "scenario-084",
seed: 109,
payload_len: 99,
data_count: 6,
parity_count: 1,
missing_indices: [0],
expected_recovery: true,
}
}
///|
fn scenario_085() -> ResilientScenario {
{
name: "scenario-085",
deck: "scenario-085",
seed: 146,
payload_len: 110,
data_count: 7,
parity_count: 2,
missing_indices: [0, 1, 2],
expected_recovery: false,
}
}
///|
fn scenario_086() -> ResilientScenario {
{
name: "scenario-086",
deck: "scenario-086",
seed: 183,
payload_len: 121,
data_count: 8,
parity_count: 3,
missing_indices: [2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_087() -> ResilientScenario {
{
name: "scenario-087",
deck: "scenario-087",
seed: 220,
payload_len: 132,
data_count: 9,
parity_count: 4,
missing_indices: [3, 4, 5, 6],
expected_recovery: true,
}
}
///|
fn scenario_088() -> ResilientScenario {
{
name: "scenario-088",
deck: "scenario-088",
seed: 6,
payload_len: 143,
data_count: 10,
parity_count: 1,
missing_indices: [8],
expected_recovery: true,
}
}
///|
fn scenario_089() -> ResilientScenario {
{
name: "scenario-089",
deck: "scenario-089",
seed: 43,
payload_len: 154,
data_count: 11,
parity_count: 2,
missing_indices: [9, 10],
expected_recovery: true,
}
}
///|
fn scenario_090() -> ResilientScenario {
{
name: "scenario-090",
deck: "scenario-090",
seed: 80,
payload_len: 165,
data_count: 12,
parity_count: 3,
missing_indices: [0, 1, 2, 3],
expected_recovery: false,
}
}
///|
fn scenario_091() -> ResilientScenario {
{
name: "scenario-091",
deck: "scenario-091",
seed: 117,
payload_len: 176,
data_count: 6,
parity_count: 4,
missing_indices: [1, 2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_092() -> ResilientScenario {
{
name: "scenario-092",
deck: "scenario-092",
seed: 154,
payload_len: 187,
data_count: 7,
parity_count: 1,
missing_indices: [1],
expected_recovery: true,
}
}
///|
fn scenario_093() -> ResilientScenario {
{
name: "scenario-093",
deck: "scenario-093",
seed: 191,
payload_len: 198,
data_count: 8,
parity_count: 2,
missing_indices: [2, 3],
expected_recovery: true,
}
}
///|
fn scenario_094() -> ResilientScenario {
{
name: "scenario-094",
deck: "scenario-094",
seed: 228,
payload_len: 209,
data_count: 9,
parity_count: 3,
missing_indices: [3, 4, 5],
expected_recovery: true,
}
}
///|
fn scenario_095() -> ResilientScenario {
{
name: "scenario-095",
deck: "scenario-095",
seed: 14,
payload_len: 220,
data_count: 10,
parity_count: 4,
missing_indices: [5, 6, 7, 8, 9],
expected_recovery: false,
}
}
///|
fn scenario_096() -> ResilientScenario {
{
name: "scenario-096",
deck: "scenario-096",
seed: 51,
payload_len: 20,
data_count: 11,
parity_count: 1,
missing_indices: [8],
expected_recovery: true,
}
}
///|
fn scenario_097() -> ResilientScenario {
{
name: "scenario-097",
deck: "scenario-097",
seed: 88,
payload_len: 31,
data_count: 12,
parity_count: 2,
missing_indices: [9, 10],
expected_recovery: true,
}
}
///|
fn scenario_098() -> ResilientScenario {
{
name: "scenario-098",
deck: "scenario-098",
seed: 125,
payload_len: 42,
data_count: 6,
parity_count: 3,
missing_indices: [2, 3, 4],
expected_recovery: true,
}
}
///|
fn scenario_099() -> ResilientScenario {
{
name: "scenario-099",
deck: "scenario-099",
seed: 162,
payload_len: 53,
data_count: 7,
parity_count: 4,
missing_indices: [3, 4, 5, 6],
expected_recovery: true,
}
}
///|
fn scenario_100() -> ResilientScenario {
{
name: "scenario-100",
deck: "scenario-100",
seed: 199,
payload_len: 64,
data_count: 8,
parity_count: 1,
missing_indices: [2, 3],
expected_recovery: false,
}
}
///|
fn scenario_101() -> ResilientScenario {
{
name: "scenario-101",
deck: "scenario-101",
seed: 236,
payload_len: 75,
data_count: 9,
parity_count: 2,
missing_indices: [5, 6],
expected_recovery: true,
}
}
///|
fn scenario_102() -> ResilientScenario {
{
name: "scenario-102",
deck: "scenario-102",
seed: 22,
payload_len: 86,
data_count: 10,
parity_count: 3,
missing_indices: [6, 7, 8],
expected_recovery: true,
}
}
///|
fn scenario_103() -> ResilientScenario {
{
name: "scenario-103",
deck: "scenario-103",
seed: 59,
payload_len: 97,
data_count: 11,
parity_count: 4,
missing_indices: [7, 8, 9, 10],
expected_recovery: true,
}
}
///|
fn scenario_104() -> ResilientScenario {
{
name: "scenario-104",
deck: "scenario-104",
seed: 96,
payload_len: 108,
data_count: 12,
parity_count: 1,
missing_indices: [8],
expected_recovery: true,
}
}
///|
fn scenario_105() -> ResilientScenario {
{
name: "scenario-105",
deck: "scenario-105",
seed: 133,
payload_len: 119,
data_count: 6,
parity_count: 2,
missing_indices: [1, 2, 3],
expected_recovery: false,
}
}
///|
fn scenario_106() -> ResilientScenario {
{
name: "scenario-106",
deck: "scenario-106",
seed: 170,
payload_len: 130,
data_count: 7,
parity_count: 3,
missing_indices: [1, 2, 3],
expected_recovery: true,
}
}
///|
fn scenario_107() -> ResilientScenario {
{
name: "scenario-107",
deck: "scenario-107",
seed: 207,
payload_len: 141,
data_count: 8,
parity_count: 4,
missing_indices: [2, 3, 4, 5],
expected_recovery: true,
}
}
///|
fn scenario_108() -> ResilientScenario {
{
name: "scenario-108",
deck: "scenario-108",
seed: 244,
payload_len: 152,
data_count: 9,
parity_count: 1,
missing_indices: [0],
expected_recovery: true,
}
}
///|
fn scenario_109() -> ResilientScenario {
{
name: "scenario-109",
deck: "scenario-109",
seed: 30,
payload_len: 163,
data_count: 10,
parity_count: 2,
missing_indices: [1, 2],
expected_recovery: true,
}
}
///|
fn scenario_110() -> ResilientScenario {
{
name: "scenario-110",
deck: "scenario-110",
seed: 67,
payload_len: 174,
data_count: 11,
parity_count: 3,
missing_indices: [6, 7, 8, 9],
expected_recovery: false,
}
}
///|
fn scenario_111() -> ResilientScenario {
{
name: "scenario-111",
deck: "scenario-111",
seed: 104,
payload_len: 185,
data_count: 12,
parity_count: 4,
missing_indices: [3, 4, 5, 6],
expected_recovery: true,
}
}
///|
fn scenario_112() -> ResilientScenario {
{
name: "scenario-112",
deck: "scenario-112",
seed: 141,
payload_len: 196,
data_count: 6,
parity_count: 1,
missing_indices: [4],
expected_recovery: true,
}
}
///|
fn scenario_113() -> ResilientScenario {
{
name: "scenario-113",
deck: "scenario-113",
seed: 178,
payload_len: 207,
data_count: 7,
parity_count: 2,
missing_indices: [5, 6],
expected_recovery: true,
}
}
///|
fn scenario_114() -> ResilientScenario {
{
name: "scenario-114",
deck: "scenario-114",
seed: 215,
payload_len: 218,
data_count: 8,
parity_count: 3,
missing_indices: [0, 1, 2],
expected_recovery: true,
}
}
///|
fn scenario_115() -> ResilientScenario {
{
name: "scenario-115",
deck: "scenario-115",
seed: 1,
payload_len: 229,
data_count: 9,
parity_count: 4,
missing_indices: [0, 1, 2, 3, 4],
expected_recovery: false,
}
}
///|
fn scenario_116() -> ResilientScenario {
{
name: "scenario-116",
deck: "scenario-116",
seed: 38,
payload_len: 29,
data_count: 10,
parity_count: 1,
missing_indices: [6],
expected_recovery: true,
}
}
///|
fn scenario_117() -> ResilientScenario {
{
name: "scenario-117",
deck: "scenario-117",
seed: 75,
payload_len: 40,
data_count: 11,
parity_count: 2,
missing_indices: [7, 8],
expected_recovery: true,
}
}
///|
fn scenario_118() -> ResilientScenario {
{
name: "scenario-118",
deck: "scenario-118",
seed: 112,
payload_len: 51,
data_count: 12,
parity_count: 3,
missing_indices: [8, 9, 10],
expected_recovery: true,
}
}
///|
fn scenario_119() -> ResilientScenario {
{
name: "scenario-119",
deck: "scenario-119",
seed: 149,
payload_len: 62,
data_count: 6,
parity_count: 4,
missing_indices: [2, 3, 4, 5],
expected_recovery: true,
}
}
///|
fn scenario_120() -> ResilientScenario {
{
name: "scenario-120",
deck: "scenario-120",
seed: 186,
payload_len: 73,
data_count: 7,
parity_count: 1,
missing_indices: [0, 1],
expected_recovery: false,
}
}