Skip to content

Commit 925f3d2

Browse files
Hamming LineUp TwoFer Generator
1 parent e262959 commit 925f3d2

File tree

4 files changed

+119
-0
lines changed

4 files changed

+119
-0
lines changed

generators/Generator/Generator.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ import Generator.RationalNumbersGenerator
1717
import Generator.GigasecondGenerator
1818
import Generator.CamiciaGenerator
1919
import Generator.ChangeGenerator
20+
import Generator.HammingGenerator
21+
import Generator.LineUpGenerator
22+
import Generator.TwoFerGenerator
2023
import Generator.YachtGenerator
2124
import Generator.PalindromeProductsGenerator
2225
import Generator.EliudsEggsGenerator
@@ -93,6 +96,9 @@ def dispatch : Std.HashMap String (introGenerator × testCaseGenerator × endBod
9396
("Gigasecond", (GigasecondGenerator.genIntro, GigasecondGenerator.genTestCase, GigasecondGenerator.genEnd)),
9497
("Camicia", (CamiciaGenerator.genIntro, CamiciaGenerator.genTestCase, CamiciaGenerator.genEnd)),
9598
("Change", (ChangeGenerator.genIntro, ChangeGenerator.genTestCase, ChangeGenerator.genEnd)),
99+
("Hamming", (HammingGenerator.genIntro, HammingGenerator.genTestCase, HammingGenerator.genEnd)),
100+
("LineUp", (LineUpGenerator.genIntro, LineUpGenerator.genTestCase, LineUpGenerator.genEnd)),
101+
("TwoFer", (TwoFerGenerator.genIntro, TwoFerGenerator.genTestCase, TwoFerGenerator.genEnd)),
96102
("Yacht", (YachtGenerator.genIntro, YachtGenerator.genTestCase, YachtGenerator.genEnd)),
97103
("PalindromeProducts", (PalindromeProductsGenerator.genIntro, PalindromeProductsGenerator.genTestCase, PalindromeProductsGenerator.genEnd)),
98104
("EliudsEggs", (EliudsEggsGenerator.genIntro, EliudsEggsGenerator.genTestCase, EliudsEggsGenerator.genEnd)),
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import Lean.Data.Json
2+
import Std
3+
import Helper
4+
5+
open Lean
6+
open Std
7+
open Helper
8+
9+
namespace HammingGenerator
10+
11+
def genIntro (exercise : String) : String := s!"import LeanTest
12+
import {exercise}
13+
14+
open LeanTest
15+
16+
def {exercise.decapitalize}Tests : TestSuite :=
17+
(TestSuite.empty \"{exercise}\")"
18+
19+
def genTestCase (exercise : String) (case : TreeMap.Raw String Json) : String :=
20+
let input := case.get! "input"
21+
let expected := case.get! "expected" |> errorToOption
22+
let description := case.get! "description"
23+
|> (·.compress)
24+
let funName := getFunName (case.get! "property")
25+
let call := s!"({exercise}.{funName} {insertAllInputs input})"
26+
s!"
27+
|>.addTest {description} (do
28+
return assertEqual {expected} {call})"
29+
30+
def genEnd (exercise : String) : String :=
31+
s!"
32+
33+
def main : IO UInt32 := do
34+
runTestSuitesWithExitCode [{exercise.decapitalize}Tests]
35+
"
36+
37+
end HammingGenerator
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import Lean.Data.Json
2+
import Std
3+
import Helper
4+
5+
open Lean
6+
open Std
7+
open Helper
8+
9+
namespace LineUpGenerator
10+
11+
def genIntro (exercise : String) : String := s!"import LeanTest
12+
import {exercise}
13+
14+
open LeanTest
15+
16+
def {exercise.decapitalize}Tests : TestSuite :=
17+
(TestSuite.empty \"{exercise}\")"
18+
19+
def genTestCase (exercise : String) (case : TreeMap.Raw String Json) : String :=
20+
let input := case.get! "input"
21+
let expected := case.get! "expected"
22+
let description := case.get! "description"
23+
|> (·.compress)
24+
let funName := getFunName (case.get! "property")
25+
let call := s!"({exercise}.{funName} {insertAllInputs input})"
26+
s!"
27+
|>.addTest {description} (do
28+
return assertEqual {expected} {call})"
29+
30+
def genEnd (exercise : String) : String :=
31+
s!"
32+
33+
def main : IO UInt32 := do
34+
runTestSuitesWithExitCode [{exercise.decapitalize}Tests]
35+
"
36+
37+
end LineUpGenerator
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import Lean.Data.Json
2+
import Std
3+
import Helper
4+
5+
open Lean
6+
open Std
7+
open Helper
8+
9+
namespace TwoFerGenerator
10+
11+
def genIntro (exercise : String) : String := s!"import LeanTest
12+
import {exercise}
13+
14+
open LeanTest
15+
16+
def {exercise.decapitalize}Tests : TestSuite :=
17+
(TestSuite.empty \"{exercise}\")"
18+
19+
def genTestCase (exercise : String) (case : TreeMap.Raw String Json) : String :=
20+
let input := match case.get! "input" |> (·.getObjValD "name") |> (·.getStr?) with
21+
| .error _ => none
22+
| .ok name => some s!"\"{name}\""
23+
let expected := case.get! "expected"
24+
let description := case.get! "description"
25+
|> (·.compress)
26+
let funName := getFunName (case.get! "property")
27+
let call := s!"({exercise}.{funName} {input})"
28+
s!"
29+
|>.addTest {description} (do
30+
return assertEqual {expected} {call})"
31+
32+
def genEnd (exercise : String) : String :=
33+
s!"
34+
35+
def main : IO UInt32 := do
36+
runTestSuitesWithExitCode [{exercise.decapitalize}Tests]
37+
"
38+
39+
end TwoFerGenerator

0 commit comments

Comments
 (0)