Skip to content

Commit 97e21e1

Browse files
authored
Merge pull request #361 from LPCIC/jdiff
Jdiff
2 parents 662813e + 535c3eb commit 97e21e1

File tree

5 files changed

+36
-4
lines changed

5 files changed

+36
-4
lines changed

CHANGES.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# v3.3.1 (September 2025)
2+
3+
Requires Menhir 20211230 and OCaml 4.13 or above.
4+
5+
- Tests:
6+
- compare json files semantically
7+
18
# v3.3.0 (September 2025)
29

310
Requires Menhir 20211230 and OCaml 4.13 or above.

elpi.opam

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ depends: [
2424
"ANSITerminal" {with-test}
2525
"cmdliner" {with-test}
2626
"fileutils" {with-test}
27+
"yojson" {with-test}
2728
"dune" {>= "2.9.0"}
2829
"conf-time" {with-test}
2930
"atdgen" {>= "2.10.0"}

tests/sources/trace.elab.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
"step_id": 1,
1010
"runtime_id": 0,
1111
"step": [
12-
"Inference",
13-
{
12+
"Inference", {
1413
"current_goal_id": 4,
1514
"current_goal_text": "main",
1615
"current_goal_predicate": "main",

tests/suite/dune

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
(library
22
(name test_suite)
3-
(libraries str unix fileutils)
3+
(libraries str unix fileutils yojson)
44
(library_flags -linkall)
55
)
66

tests/suite/suite.ml

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,31 @@ let match_file ~log file adjust reference =
329329
| _ -> false
330330
end
331331

332+
let match_json_file ~log file adjust reference =
333+
let file = adjust file in
334+
let dig1 = Digest.to_hex (Digest.file file) in
335+
let dig2 = Digest.(to_hex (file reference)) in
336+
if dig1 = dig2 then begin
337+
Util.write log (Printf.sprintf "Digest of %s and %s is %s\n" file reference dig2);
338+
true
339+
end else
340+
let yreference = Yojson.Safe.from_file reference in
341+
let yfile = Yojson.Safe.from_file file in
342+
Yojson.Safe.equal yreference yfile ||
343+
begin
344+
Util.write log (Printf.sprintf "Diffing %s against %s\n" file reference);
345+
match
346+
Util.exec ~timeout:5.0 ~env:(Unix.environment ())
347+
~log ~close_output:false
348+
~executable:"diff" ~args:["-u";"--strip-trailing-cr";reference;file] ()
349+
with
350+
| Util.Exit(0,_,_) -> true
351+
| Util.Exit(n,_,_) ->
352+
Util.write log (Printf.sprintf "Exit code: %d\n" n);
353+
Util.write log (Printf.sprintf "Promotion: cp %s %s\n" file reference);
354+
false
355+
| _ -> false
356+
end
332357

333358
module Elpi = struct
334359

@@ -486,7 +511,7 @@ module ElpiTraceElab = struct
486511
match outcome, outcomey, test.Test.expectation with
487512
| Util.Exit(0,walltime,mem), Some(Util.Exit(0,_,_)), Test.SuccessOutputTxt f when f (Util.read_lines (snd log)) ->
488513
Runner.Success { walltime; typechecking; execution; mem }
489-
| Util.Exit(0,walltime,mem), Some(Util.Exit(0,_,_)), Test.SuccessOutputFile { sample; adjust; reference } when match_file ~log sample adjust (sources^"/"^reference) ->
514+
| Util.Exit(0,walltime,mem), Some(Util.Exit(0,_,_)), Test.SuccessOutputFile { sample; adjust; reference } when match_json_file ~log sample adjust (sources^"/"^reference) ->
490515
Runner.Success { walltime; typechecking; execution; mem }
491516
| Util.Exit(0,walltime,mem), Some(Util.Exit(0,_,_)), Test.SuccessOutputFile { sample; adjust; reference } when promote ->
492517
FileUtil.cp [adjust sample] (sources^"/"^reference);

0 commit comments

Comments
 (0)