lean4-htt/tests/lean/run/toExpr.lean
Leonardo de Moura 2f3211028b
feat: support for Rat scientific literals (#10961)
This PR adds support for scientific literals for `Rat` in `grind`.
`grind` does not yet add support for this kind of literal in arbitrary
fields.

closes #10489
2025-10-26 02:05:26 +00:00

61 lines
1.4 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Lean
open Lean
unsafe def test {α : Type} [ToString α] [ToExpr α] [BEq α] (a : α) : CoreM Unit := do
let auxName := `_toExpr._test;
let decl := Declaration.defnDecl {
name := auxName,
levelParams := [],
value := toExpr a,
type := toTypeExpr α,
hints := ReducibilityHints.abbrev,
safety := DefinitionSafety.safe
};
IO.println (toExpr a);
let oldEnv ← getEnv;
addAndCompile decl;
let newEnv ← getEnv
setEnv oldEnv
match newEnv.evalConst α {} auxName with
| Except.error ex => throwError ex
| Except.ok b => do
IO.println b;
unless a == b do
throwError "toExpr failed";
pure ()
#eval test #[(1, 2), (3, 4)]
#eval test ['a', 'b', 'c']
#eval test ("hello", true)
#eval test ((), 10)
#eval test (1:Rat)
#eval test (-1:Rat)
#eval test (2:Rat)
#eval test (-2:Rat)
#eval test (1/(-2):Rat)
#eval test (-2/3:Rat)
#eval test (-2/1:Rat)
#eval test (-20/3:Rat)
#eval test (-1.234:Rat)
#eval test (0.67:Rat)
open Lean Meta
def testRat (n : Rat) : MetaM Unit := do
let e := toExpr n
IO.println e
let some n' ← getRatValue? e | throwError "`Rat` expected{indentExpr e}"
IO.println n'
assert! n == n'
#eval testRat 0
#eval testRat 1
#eval testRat (1/2)
#eval testRat (1/(-2))
#eval testRat (2/3)
#eval testRat (0.67)
#eval testRat (1.67)
#eval testRat (1.68)
#eval testRat (-1.67)
#eval testRat (-2)
#eval testRat (-0.67)