-
Notifications
You must be signed in to change notification settings - Fork 45
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #366 from Leonidas-from-XIV/dune-gen-non-determini…
…stic Allow running non-deterministic MDX stanzas using `dune-gen`
- Loading branch information
Showing
7 changed files
with
134 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
(* small helper to determine whether two files differ *) | ||
|
||
type comparison = Same | Different | ||
|
||
let rec compare first second = | ||
match input_line first with | ||
| first_line -> ( | ||
match input_line second with | ||
| second_line -> | ||
match String.equal first_line second_line with | ||
| true -> compare first second | ||
| false -> | ||
(* we found a difference between the lines *) | ||
Different | ||
| exception End_of_file -> | ||
(* the second file ended before the first *) | ||
Different) | ||
| exception End_of_file -> | ||
(* the first file ended first *) | ||
match input_line second with | ||
| _ -> | ||
(* the second file continues: a difference *) | ||
Different | ||
| exception End_of_file -> | ||
(* the second file ended too *) | ||
Same | ||
|
||
let main () = | ||
let first = Sys.argv.(1) |> open_in in | ||
let second = Sys.argv.(2) |> open_in in | ||
let comparison = compare first second in | ||
close_in first; | ||
close_in second; | ||
match comparison with | ||
| Same -> | ||
prerr_endline "The files appear to be identical"; | ||
(* we didn't find a difference, exit with a failure code *) | ||
exit 1 | ||
| Different -> () | ||
|
||
let () = | ||
main () |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
(rule | ||
(with-stdout-to | ||
dune_gen.ml | ||
(run ocaml-mdx dune-gen))) | ||
|
||
(executable | ||
(name dune_gen) | ||
(modules dune_gen) | ||
(modes byte) | ||
(libraries mdx.test)) | ||
|
||
(rule | ||
(with-stdout-to | ||
dune-mdx-nondeterministic.deterministic | ||
(run ./dune_gen.exe %{dep:dune-mdx-nondeterministic}))) | ||
|
||
(rule | ||
(setenv | ||
MDX_RUN_NON_DETERMINISTIC | ||
1 | ||
(with-stdout-to | ||
dune-mdx-nondeterministic.nondeterministic | ||
(run ./dune_gen.exe %{dep:dune-mdx-nondeterministic})))) | ||
|
||
(rule | ||
(alias runtest) | ||
(action | ||
(diff dune-mdx-nondeterministic.expected | ||
dune-mdx-nondeterministic.deterministic))) | ||
|
||
;; make sure the non-deterministic is different from the deterministic | ||
|
||
(executable | ||
(name different) | ||
(modules different)) | ||
|
||
(rule | ||
(alias runtest) | ||
(action | ||
(run ./different.exe %{dep:dune-mdx-nondeterministic.expected} | ||
%{dep:dune-mdx-nondeterministic.nondeterministic}))) |
18 changes: 18 additions & 0 deletions
18
test/bin/mdx-dune-gen/misc/non-deterministic/dune-mdx-nondeterministic
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
This test checks whether the non-deterministic mode works with the `dune` `mdx` | ||
stanza. | ||
|
||
Deterministic stanzas should get run and corrected, as for 1 plus one is not 3: | ||
|
||
```ocaml | ||
# 1 + 1;; | ||
- : int = 42 | ||
``` | ||
|
||
Non-deterministic ones should not be updated, since whatever `Random` outputs | ||
should be random: | ||
|
||
<!-- $MDX non-deterministic=command --> | ||
```ocaml | ||
# Random.int 1000;; | ||
- : int = 42 | ||
``` |
18 changes: 18 additions & 0 deletions
18
test/bin/mdx-dune-gen/misc/non-deterministic/dune-mdx-nondeterministic.expected
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
This test checks whether the non-deterministic mode works with the `dune` `mdx` | ||
stanza. | ||
|
||
Deterministic stanzas should get run and corrected, as for 1 plus one is not 3: | ||
|
||
```ocaml | ||
# 1 + 1;; | ||
- : int = 2 | ||
``` | ||
|
||
Non-deterministic ones should not be updated, since whatever `Random` outputs | ||
should be random: | ||
|
||
<!-- $MDX non-deterministic=command --> | ||
```ocaml | ||
# Random.int 1000;; | ||
- : int = 42 | ||
``` |