Skip to content

Commit

Permalink
Turn exercise 009 into practice #2177 (#2229)
Browse files Browse the repository at this point in the history
* "Pratice-009-done"

* "Done"

* Update impl.ml

* Update run.ml

* Update impl.ml

* Update ex.ml

* Update dune

* Do not touch irrelevant file

* "Update -lines added"

* "Update -Extra lines deleted"

* "Update -Extra lines deleted"

* Update ex.ml
  • Loading branch information
Kxrishx03 committed Mar 26, 2024
1 parent 676298d commit d79c4b9
Show file tree
Hide file tree
Showing 9 changed files with 40 additions and 0 deletions.
8 changes: 8 additions & 0 deletions practice/009/answer/impl.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
let pack list =
let rec aux current acc = function
| [] -> [] (* Can only be reached if original list is empty *)
| [x] -> (x :: current) :: acc
| a :: (b :: _ as t) ->
if a = b then aux (a :: current) acc t
else aux [] ((a :: current) :: acc) t in
List.rev (aux [] [] list);;
2 changes: 2 additions & 0 deletions practice/009/answer/test/dune
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(include_subdirs no)
(test (name run) (libraries ounit2 ex))
3 changes: 3 additions & 0 deletions practice/009/answer/test/run.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module Test = Ex.Make(Ex.Answer)

let () = OUnit2.run_test_tt_main Test.v
2 changes: 2 additions & 0 deletions practice/009/dune
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(include_subdirs qualified)
(library (name ex) (libraries ounit2))
1 change: 1 addition & 0 deletions practice/009/dune-project
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
(lang dune 3.7)
18 changes: 18 additions & 0 deletions practice/009/ex.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
open OUnit2

module type Testable = sig
val pack : 'a list -> 'a list list
end

module Make(Tested: Testable) : sig val v : test end = struct
let v = "pack" >::: [
"example" >:: (fun _ ->
assert_equal
[["a"; "a"; "a"; "a"]; ["b"]; ["c"; "c"]; ["a"; "a"]; ["d"; "d"];
["e"; "e"; "e"; "e"]]
(Tested.pack ["a"; "a"; "a"; "a"; "b"; "c"; "c"; "a"; "a"; "d"; "d"; "e"; "e"; "e"; "e"]))
]
end

module Work : Testable = Work.Impl
module Answer : Testable = Answer.Impl
1 change: 1 addition & 0 deletions practice/009/work/impl.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
let pack _ = failwith "Not yet implemented"
2 changes: 2 additions & 0 deletions practice/009/work/test/dune
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(include_subdirs no)
(test (name run) (libraries ounit2 ex))
3 changes: 3 additions & 0 deletions practice/009/work/test/run.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module Test = Ex.Make(Ex.Work)

let () = OUnit2.run_test_tt_main Test.v

0 comments on commit d79c4b9

Please sign in to comment.