/-!
Tests for deriving decidable equality using the linear-size parallel match construction that takes
`x1.ctorIdx = x2.ctorIdx` as assumption.
-/

-- We always want to use the new construction in this test
set_option deriving.decEq.linear_construction_threshold 0

inductive EmptyType : Type
deriving DecidableEq

structure SimpleStruct where
  field : Bool
deriving DecidableEq

inductive DependentStruct1 : Nat → Type where
  | mk (n : Nat) (x : Fin n): DependentStruct1 n
deriving DecidableEq

/--
error: Dependent elimination failed: Failed to solve equation
  Decidable.rec (fun h => (fun x => 1) h) (fun h => (fun x => 0) h) (instDecidableEqBool b✝ true) =
    Decidable.rec (fun h => (fun x => 1) h) (fun h => (fun x => 0) h) (instDecidableEqBool b true)
-/
#guard_msgs in
inductive DependentStruct2 : Nat → Type where
  | mk (b : Bool) : DependentStruct2 (if b then 0 else 1)
deriving DecidableEq

inductive Vec (α : Type u) : Nat → Type u
  | nil  : Vec α 0
  | cons : α → {n : Nat} → Vec α n → Vec α (n+1)
deriving DecidableEq

inductive Test (α : Type)
  | mk₀
  | mk₁ : (n : Nat) → (α × α) → List α → Vec α n → Test α
  | mk₂ : Test α → α → Test α
deriving DecidableEq
