This PR sets up the new integrated test/bench suite. It then migrates all benchmarks and some related tests to the new suite. There's also some documentation and some linting. For now, a lot of the old tests are left alone so this PR doesn't become even larger than it already is. Eventually, all tests should be migrated to the new suite though so there isn't a confusing mix of two systems.
95 lines
2.4 KiB
Text
95 lines
2.4 KiB
Text
import Lean.Server.Rpc.Basic
|
||
|
||
open Lean Server
|
||
|
||
abbrev M := StateM RpcObjectStore
|
||
|
||
def M.run (x : ExceptT String M α) : Except String α :=
|
||
x.run' {}
|
||
|
||
def test (α : Type) [RpcEncodable α] (a : α) := M.run do
|
||
let json ← rpcEncode a
|
||
let _a : α ← ofExcept (rpcDecode json (← get))
|
||
return json
|
||
|
||
structure FooRef where
|
||
a : Array Nat
|
||
deriving Inhabited, TypeName
|
||
|
||
#eval do return test (WithRpcRef FooRef) (← WithRpcRef.mk default)
|
||
|
||
structure FooJson where
|
||
s : String
|
||
deriving FromJson, ToJson, Inhabited
|
||
|
||
structure Bar where
|
||
fooRef : WithRpcRef FooRef
|
||
fooJson : FooJson
|
||
deriving RpcEncodable, Inhabited
|
||
|
||
def Bar.mkDefault : BaseIO Bar := do return {
|
||
fooRef := ← WithRpcRef.mk default
|
||
fooJson := default
|
||
}
|
||
|
||
#eval do return test Bar (← Bar.mkDefault)
|
||
|
||
structure BarTrans where
|
||
bar : Bar
|
||
deriving RpcEncodable, Inhabited
|
||
|
||
#eval do return test BarTrans { bar := ← Bar.mkDefault }
|
||
|
||
structure Baz where
|
||
arr : Array String -- non-constant field
|
||
deriving RpcEncodable, Inhabited
|
||
|
||
#eval test Baz default
|
||
|
||
structure FooGeneric (α : Type) where
|
||
a : α
|
||
b? : Option α
|
||
deriving RpcEncodable, Inhabited
|
||
|
||
#eval test (FooGeneric Nat) default
|
||
#eval test (FooGeneric Nat) { a := 3, b? := some 42 }
|
||
|
||
inductive BazInductive
|
||
| baz (arr : Array Bar)
|
||
deriving RpcEncodable, Inhabited
|
||
|
||
#eval do return test BazInductive ⟨#[← Bar.mkDefault, ← Bar.mkDefault]⟩
|
||
|
||
inductive FooInductive (α : Type) where
|
||
| a : α → WithRpcRef FooRef → FooInductive α
|
||
| b : (n : Nat) → (a : α) → (m : Nat) → FooInductive α
|
||
deriving RpcEncodable, Inhabited
|
||
|
||
#eval do return test (FooInductive BazInductive) (.a default (← WithRpcRef.mk default))
|
||
#eval do return test (FooInductive BazInductive) (.b 42 default default)
|
||
|
||
inductive FooNested (α : Type) where
|
||
| a : α → Array (FooNested α) → FooNested α
|
||
deriving RpcEncodable, Inhabited
|
||
|
||
#eval test (FooNested BazInductive) (.a default #[default])
|
||
|
||
inductive FooParam (n : Nat) where
|
||
| a : Nat → FooParam n
|
||
deriving RpcEncodable, Inhabited
|
||
|
||
#eval test (FooParam 10) (.a 42)
|
||
|
||
inductive Unused (α : Type) | a
|
||
deriving RpcEncodable, Inhabited
|
||
|
||
structure NoRpcEncodable
|
||
#eval test (Unused NoRpcEncodable) default
|
||
|
||
structure UnusedStruct (α : Type)
|
||
deriving RpcEncodable, Inhabited
|
||
|
||
#eval test (UnusedStruct NoRpcEncodable) default
|
||
|
||
deriving instance Repr, RpcEncodable for Empty
|
||
#eval rpcDecode (α := Empty) .null {}
|