Skip to content

Commit 38311a1

Browse files
Raindrops RnaTranscription RunLengthEncoding Generator
1 parent 1141d95 commit 38311a1

File tree

5 files changed

+144
-26
lines changed

5 files changed

+144
-26
lines changed

exercises/practice/run-length-encoding/RunLengthEncodingTest.lean

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,32 @@ open LeanTest
55

66
def runLengthEncodingTests : TestSuite :=
77
(TestSuite.empty "RunLengthEncoding")
8-
|>.addTest "run-length encode a string - empty string" (do
9-
return assertEqual "" (RunLengthEncoding.encode ""))
10-
|>.addTest "run-length encode a string - single characters only are encoded without count" (do
11-
return assertEqual "XYZ" (RunLengthEncoding.encode "XYZ"))
12-
|>.addTest "run-length encode a string - string with no single characters" (do
13-
return assertEqual "2A3B4C" (RunLengthEncoding.encode "AABBBCCCC"))
14-
|>.addTest "run-length encode a string - single characters mixed with repeated characters" (do
15-
return assertEqual "12WB12W3B24WB" (RunLengthEncoding.encode "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB"))
16-
|>.addTest "run-length encode a string - multiple whitespace mixed in string" (do
17-
return assertEqual "2 hs2q q2w2 " (RunLengthEncoding.encode " hsqq qww "))
18-
|>.addTest "run-length encode a string - lowercase characters" (do
19-
return assertEqual "2a3b4c" (RunLengthEncoding.encode "aabbbcccc"))
20-
|>.addTest "run-length decode a string - empty string" (do
21-
return assertEqual "" (RunLengthEncoding.decode ""))
22-
|>.addTest "run-length decode a string - single characters only" (do
23-
return assertEqual "XYZ" (RunLengthEncoding.decode "XYZ"))
24-
|>.addTest "run-length decode a string - string with no single characters" (do
25-
return assertEqual "AABBBCCCC" (RunLengthEncoding.decode "2A3B4C"))
26-
|>.addTest "run-length decode a string - single characters with repeated characters" (do
27-
return assertEqual "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB" (RunLengthEncoding.decode "12WB12W3B24WB"))
28-
|>.addTest "run-length decode a string - multiple whitespace mixed in string" (do
29-
return assertEqual " hsqq qww " (RunLengthEncoding.decode "2 hs2q q2w2 "))
30-
|>.addTest "run-length decode a string - lowercase string" (do
31-
return assertEqual "aabbbcccc" (RunLengthEncoding.decode "2a3b4c"))
32-
|>.addTest "encode and then decode - encode followed by decode gives original string" (do
33-
return assertEqual "zzz ZZ zZ" (RunLengthEncoding.decode (RunLengthEncoding.encode "zzz ZZ zZ")))
8+
|>.addTest "run-length encode a string -> empty string" (do
9+
return assertEqual "" ("" |> RunLengthEncoding.encode))
10+
|>.addTest "run-length encode a string -> single characters only are encoded without count" (do
11+
return assertEqual "XYZ" ("XYZ" |> RunLengthEncoding.encode))
12+
|>.addTest "run-length encode a string -> string with no single characters" (do
13+
return assertEqual "2A3B4C" ("AABBBCCCC" |> RunLengthEncoding.encode))
14+
|>.addTest "run-length encode a string -> single characters mixed with repeated characters" (do
15+
return assertEqual "12WB12W3B24WB" ("WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB" |> RunLengthEncoding.encode))
16+
|>.addTest "run-length encode a string -> multiple whitespace mixed in string" (do
17+
return assertEqual "2 hs2q q2w2 " (" hsqq qww " |> RunLengthEncoding.encode))
18+
|>.addTest "run-length encode a string -> lowercase characters" (do
19+
return assertEqual "2a3b4c" ("aabbbcccc" |> RunLengthEncoding.encode))
20+
|>.addTest "run-length decode a string -> empty string" (do
21+
return assertEqual "" ("" |> RunLengthEncoding.decode))
22+
|>.addTest "run-length decode a string -> single characters only" (do
23+
return assertEqual "XYZ" ("XYZ" |> RunLengthEncoding.decode))
24+
|>.addTest "run-length decode a string -> string with no single characters" (do
25+
return assertEqual "AABBBCCCC" ("2A3B4C" |> RunLengthEncoding.decode))
26+
|>.addTest "run-length decode a string -> single characters with repeated characters" (do
27+
return assertEqual "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB" ("12WB12W3B24WB" |> RunLengthEncoding.decode))
28+
|>.addTest "run-length decode a string -> multiple whitespace mixed in string" (do
29+
return assertEqual " hsqq qww " ("2 hs2q q2w2 " |> RunLengthEncoding.decode))
30+
|>.addTest "run-length decode a string -> lowercase string" (do
31+
return assertEqual "aabbbcccc" ("2a3b4c" |> RunLengthEncoding.decode))
32+
|>.addTest "encode and then decode -> encode followed by decode gives original string" (do
33+
return assertEqual "zzz ZZ zZ" ("zzz ZZ zZ" |> RunLengthEncoding.encode |> RunLengthEncoding.decode))
3434

3535
def main : IO UInt32 := do
3636
runTestSuitesWithExitCode [runLengthEncodingTests]

generators/Generator/Generator.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ import Generator.EtlGenerator
2020
import Generator.ClockGenerator
2121
import Generator.CollatzConjectureGenerator
2222
import Generator.DiamondGenerator
23+
import Generator.RaindropsGenerator
24+
import Generator.RnaTranscriptionGenerator
25+
import Generator.RunLengthEncodingGenerator
2326
import Generator.TransposeGenerator
2427
import Generator.GameOfLifeGenerator
2528
import Generator.WordyGenerator
@@ -85,6 +88,9 @@ def dispatch : Std.HashMap String (introGenerator × testCaseGenerator × endBod
8588
("Clock", (ClockGenerator.genIntro, ClockGenerator.genTestCase, ClockGenerator.genEnd)),
8689
("CollatzConjecture", (CollatzConjectureGenerator.genIntro, CollatzConjectureGenerator.genTestCase, CollatzConjectureGenerator.genEnd)),
8790
("Diamond", (DiamondGenerator.genIntro, DiamondGenerator.genTestCase, DiamondGenerator.genEnd)),
91+
("Raindrops", (RaindropsGenerator.genIntro, RaindropsGenerator.genTestCase, RaindropsGenerator.genEnd)),
92+
("RnaTranscription", (RnaTranscriptionGenerator.genIntro, RnaTranscriptionGenerator.genTestCase, RnaTranscriptionGenerator.genEnd)),
93+
("RunLengthEncoding", (RunLengthEncodingGenerator.genIntro, RunLengthEncodingGenerator.genTestCase, RunLengthEncodingGenerator.genEnd)),
8894
("Transpose", (TransposeGenerator.genIntro, TransposeGenerator.genTestCase, TransposeGenerator.genEnd)),
8995
("GameOfLife", (GameOfLifeGenerator.genIntro, GameOfLifeGenerator.genTestCase, GameOfLifeGenerator.genEnd)),
9096
("Wordy", (WordyGenerator.genIntro, WordyGenerator.genTestCase, WordyGenerator.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 RaindropsGenerator
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 RaindropsGenerator
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 RnaTranscriptionGenerator
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 RnaTranscriptionGenerator
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import Lean.Data.Json
2+
import Std
3+
import Helper
4+
5+
open Lean
6+
open Std
7+
open Helper
8+
9+
namespace RunLengthEncodingGenerator
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 := Id.run do
20+
let input := case.get! "input"
21+
let expected := case.get! "expected"
22+
let description := case.get! "description"
23+
|> (·.compress)
24+
let mut funName := getFunName (case.get! "property")
25+
if funName == "consistency" then funName := s!"encode |> {exercise}.decode"
26+
let call := s!"({insertAllInputs input} |> {exercise}.{funName})"
27+
s!"
28+
|>.addTest {description} (do
29+
return assertEqual {expected} {call})"
30+
31+
def genEnd (exercise : String) : String :=
32+
s!"
33+
34+
def main : IO UInt32 := do
35+
runTestSuitesWithExitCode [{exercise.decapitalize}Tests]
36+
"
37+
38+
end RunLengthEncodingGenerator

0 commit comments

Comments
 (0)