This adds a `test_extern` command. Usage: ``` import Lean.Util.TestExtern test_extern Nat.add 17 37 ``` This: * Checks that the head symbol has an `@[extern]` attribute. * Writes down `t == t'`, where `t` is the term provided, and `t'` is the reference implementation (specifically, `t` with the head symbol unfolded). * Tries to reduce this to `true`, and complains if this fails. Note that the type of the term must have a `BEq` instance for this to work: there's a self-explanatory error message if it isn't available.
7 lines
203 B
Text
7 lines
203 B
Text
error: stdout:
|
|
./././TestExtern.lean:5:0: error: native implementation did not agree with reference implementation!
|
|
Compare the outputs of:
|
|
#eval Nat.not_add 4 5
|
|
and
|
|
#eval match 4, 5 with
|
|
| x, x_1 => 0
|