/-! This test asserts the basic behavior of the simpCases pass. In particular this pass is capable
  of de-duplicating some branches that simp can't at the current moment. -/

inductive Foo where
  | a (n : Nat)
  | b (n : Nat)
  | c (n : Nat)

@[noinline]
def aux (n : Nat) : Nat := n

/--
trace: [Compiler.saveMono] size: 7
    def test f : Nat :=
      cases f : Nat
      | Foo.a n.1 =>
        let _x.2 := aux n.1;
        return _x.2
      | Foo.b n.3 =>
        let _x.4 := aux n.3;
        return _x.4
      | Foo.c n.5 =>
        let _x.6 := aux n.5;
        return _x.6
[Compiler.simpCase] size: 2
    def test f : tobj :=
      let n.1 := oproj[0] f;
      let _x.2 := aux n.1;
      return _x.2
-/
#guard_msgs in
set_option trace.Compiler.saveMono true in
set_option trace.Compiler.simpCase true in
def test (f : Foo) : Nat :=
  match f with
  | .a n => aux n
  | .b n => aux n
  | .c n => aux n
