Zulip Chat Archive
Stream: lean4
Topic: How to write (idiomatic) tests in Lean 4?
Santtu (Dec 27 2024 at 17:23):
What the title says. I've been trying to find information about what the idiomatic way of writing tests in Lean 4 is supposed to be, but that information seems to be under some rock. Also, how do I run the tests once I have written them? I see lake has a command test, but the help for lake test talks about some "test driver", and I've still to find a clearly written example of this. Do I need to set it up in lakefile.toml?
Siddhartha Gadgil (Dec 28 2024 at 10:49):
Yes, you need a lakefile.toml or a lakefile.lean, but you need this for any lean project. Here is an example lakefile.toml with a test driver.
name = "LeanSearchClient"
testDriver = "LeanSearchClientTest"
defaultTargets = ["LeanSearchClient"]
[[lean_lib]]
name = "LeanSearchClient"
[[lean_lib]]
name = "LeanSearchClientTest"
The library LeanSearchClientTest has the test files, which are simply Lean files. A useful way to write tests is to use guard_msgs before a command say #eval ... or #check ....
/-- info: 2 -/
#guard_msgs in
#eval 1 + 1
The great thing about #guard_msgs is if you just include it, you will get a code action to add the correct stuff.
Santtu (Dec 28 2024 at 13:58):
Right, having the tests as a separate library makes sense. And I suppose that marking the tests library as a test driver makes it possible to import stuff from the actual library?
Eric Wieser (Dec 28 2024 at 14:01):
I think the lean_lib is what makes the imports resolve; the testDriver just hooks it up to lake test
Tomas Skrivan (Dec 28 2024 at 20:41):
What is the idiomatic way to run compiled tests?
I.e. I have a bunch of lean files with def main : IO Int := ... which should return 0 when executed.
I do now want to list all those files in lakefile but say that all files in a directory should be treated that way.
Last updated: May 02 2025 at 03:31 UTC