import Std.Internal.Rat
open Std.Internal

/-!
Tests for `pp.numericTypes` and `pp.natLit`

RFC #3021
-/

open Lean

section

/-!
Both raw nat lits and non-raw natural numbers pretty print the same by default
-/
#check nat_lit 22
#check 22

set_option pp.natLit true

/-!
The raw nat lit pretty prints with the `nat_lit` prefix when `pp.natLit` is true.
-/
#check nat_lit 22
#check 22

end

section
set_option pp.numericTypes true

/-!
The `pp.numericTypes` option sets `pp.natLit` to true.
-/
#check nat_lit 22

/-!
Natural number literal
-/
#check (22 : Rat)

/-!
Negative integer literal
-/
#check (-22 : Rat)

/-!
Rational literal of two natural numbers
-/
#check (22 / 17 : Rat)

/-!
Rational literal of a negative integer and a rational
-/
#check (-22 / 17 : Rat)

/-!
Not a rational literal since the denominator is negative.
-/
#check (-22 / -17 : Rat)

/-!
Natural number literal for `Fin`.
-/
#check (17 : Fin 22)

/-!
Natural number literal for `Nat`.
-/
#check 2

/-!
Natural number literals in the context of an equation.
-/
#check 2 + 1 = 3

/-!
Testing `pp.all` override. The `2` should not appear with `nat_lit` in the `OfNat.ofNat` expression.
-/
set_option pp.all true
#check 2

end

section
set_option pp.all true

/-!
Testing `pp.all`.
-/
#check 2

/-!
Testing `pp.all` when `pp.natLit` is *explicitly* set to true.
-/
set_option pp.natLit true
#check 2

end
