[
  {
    "case": "come_out_seven_win",
    "input": { "startingBankroll": 100, "passBet": 10, "oddsMultiple": 2, "rollTotal": 7, "pointBeforeRoll": null },
    "expected": {
      "availableBankroll": 110,
      "pointAfterRoll": null,
      "activeExposure": 0,
      "passResult": "Pass line win: $10.00",
      "roundResult": "Come-out winner: $10.00"
    }
  },
  {
    "case": "come_out_craps_loss",
    "input": { "startingBankroll": 100, "passBet": 10, "oddsMultiple": 2, "rollTotal": 2, "pointBeforeRoll": null },
    "expected": {
      "availableBankroll": 90,
      "pointAfterRoll": null,
      "activeExposure": 0,
      "passResult": "Pass line loss: $10.00",
      "roundResult": "Come-out loser: -$10.00"
    }
  },
  {
    "case": "point_established_with_two_x_odds",
    "input": { "startingBankroll": 100, "passBet": 10, "oddsMultiple": 2, "rollTotal": 6, "pointBeforeRoll": null },
    "expected": {
      "availableBankroll": 70,
      "pointAfterRoll": 6,
      "activeExposure": 30,
      "passResult": "Point established on 6. Pass line reserved.",
      "oddsResult": "Odds reserved: $20.00"
    }
  },
  {
    "case": "three_four_five_x_odds_point_six",
    "input": { "startingBankroll": 100, "passBet": 10, "oddsProfile": "3-4-5x", "rollTotal": 6, "pointBeforeRoll": null },
    "expected": {
      "availableBankroll": 40,
      "pointAfterRoll": 6,
      "activeExposure": 60,
      "oddsResult": "Odds reserved: $50.00",
      "maxReserve": 60
    }
  },
  {
    "case": "point_six_made_with_two_x_odds",
    "input": { "startingBankrollAfterReserve": 70, "passBet": 10, "oddsBet": 20, "pointBeforeRoll": 6, "rollTotal": 6 },
    "expected": {
      "availableBankroll": 134,
      "pointAfterRoll": null,
      "activeExposure": 0,
      "passResult": "Pass line win: $10.00",
      "oddsResult": "Odds win: $24.00",
      "roundResult": "Point made: $34.00"
    }
  },
  {
    "case": "seven_out_after_point",
    "input": { "startingBankrollAfterReserve": 70, "passBet": 10, "oddsBet": 20, "pointBeforeRoll": 6, "rollTotal": 7 },
    "expected": {
      "availableBankroll": 70,
      "pointAfterRoll": null,
      "activeExposure": 0,
      "passResult": "Pass line loss: $10.00",
      "oddsResult": "Odds loss: $20.00",
      "roundResult": "Seven out: -$30.00"
    }
  },
  {
    "case": "insufficient_bankroll_for_selected_odds",
    "input": { "startingBankroll": 20, "passBet": 10, "oddsMultiple": 2, "pointBeforeRoll": null },
    "expected": {
      "error": "Available bankroll must cover the pass line bet and the selected maximum odds exposure before the come-out roll."
    }
  },
  {
    "case": "invalid_zero_bankroll",
    "input": { "startingBankroll": 0, "passBet": 10, "oddsMultiple": 2 },
    "expected": {
      "error": "Enter a starting bankroll above $0 and a pass line bet above $0."
    }
  },
  {
    "case": "share_url_excludes_private_data",
    "input": { "startingBankroll": 1000, "passBet": 10, "oddsMultiple": 2, "tableMin": 10, "tableMax": 500, "rollsPerHour": 100, "sessionHours": 1 },
    "expected": {
      "queryParameters": ["bankroll", "pass", "odds", "tableMin", "tableMax", "rolls", "hours"],
      "excludedParameters": ["account", "ticket", "name", "address", "casinoAccount", "supportTranscript"],
      "canonical": "/tools/craps/"
    }
  },
  {
    "case": "session_expected_loss_estimate",
    "input": { "passBet": 10, "rollsPerHour": 100, "sessionHours": 1, "averageRollsPerPassDecision": 3.376, "passLineEdge": 0.01414 },
    "expected": {
      "estimatedDecisionsRounded": 30,
      "expectedLossApprox": 4.19,
      "label": "expectation math, not prediction"
    }
  },
  {
    "case": "visual_chip_preview_point_four_two_x",
    "input": { "passBet": 10, "oddsProfile": "2x", "selectedPoint": 4 },
    "expected": {
      "reservedChips": 30,
      "oddsWinIfPointRepeats": 40,
      "roundingNote": "Exact math"
    }
  },
  {
    "case": "table_evidence_checklist_scope",
    "input": { "checked": ["table label or game title visible", "odds cap visible", "payout chart visible"] },
    "expected": {
      "outputIncludes": ["Craps table evidence packet", "odds cap visible", "payout chart visible"],
      "doesNotProve": ["legality", "payout approval", "account status", "tax treatment", "dice fairness", "betting-system result"]
    }
  },
  {
    "case": "child_asset_routes",
    "input": { "routeCluster": "/tools/craps/" },
    "expected": {
      "payoutCalculator": "/tools/craps/payout-calculator/",
      "probabilityTable": "/tools/craps/probability-table/",
      "probabilityCsv": "/tools/craps/probability-table.csv"
    }
  },
  {
    "case": "clear_button_scope",
    "input": { "action": "clear_entered_values" },
    "expected": {
      "resets": ["starting bankroll input", "pass line bet input", "odds multiple", "current simulated round"],
      "doesNotDelete": ["downloaded TXT files", "downloaded CSV files"],
      "storage": "browser-only simulator state"
    }
  }
]
