trackler 2.2.1.108 → 2.2.1.109

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/java/exercises/hamming/.meta/version +1 -1
  4. data/tracks/java/exercises/kindergarten-garden/.meta/version +1 -1
  5. data/tracks/java/exercises/rotational-cipher/.meta/version +1 -1
  6. data/tracks/java/exercises/scrabble-score/.meta/version +1 -1
  7. data/tracks/java/exercises/secret-handshake/.meta/version +1 -1
  8. data/tracks/java/exercises/twelve-days/.meta/version +1 -1
  9. data/tracks/ocaml/tools/test-generator/src/model.ml +21 -0
  10. data/tracks/ocaml/tools/test-generator/src/ocaml_special_cases.ml +4 -5
  11. data/tracks/ocaml/tools/test-generator/src/parser.ml +16 -4
  12. data/tracks/ocaml/tools/test-generator/src/test_gen.ml +2 -2
  13. data/tracks/ocaml/tools/test-generator/src/utils.ml +1 -1
  14. data/tracks/ocaml/tools/test-generator/templates/ocaml/all-your-base/test.ml +1 -1
  15. data/tracks/ocaml/tools/test-generator/templates/ocaml/bob/test.ml +2 -2
  16. data/tracks/ocaml/tools/test-generator/templates/ocaml/bracket-push/test.ml +1 -1
  17. data/tracks/ocaml/tools/test-generator/templates/ocaml/dominoes/test.ml +1 -1
  18. data/tracks/ocaml/tools/test-generator/templates/ocaml/leap/test.ml +2 -2
  19. data/tracks/ocaml/tools/test-generator/templates/ocaml/luhn/test.ml +1 -1
  20. data/tracks/ocaml/tools/test-generator/templates/ocaml/minesweeper/test.ml +1 -1
  21. data/tracks/ocaml/tools/test-generator/templates/ocaml/palindrome-products/test.ml +1 -1
  22. data/tracks/ocaml/tools/test-generator/templates/ocaml/pangram/test.ml +1 -1
  23. data/tracks/ocaml/tools/test-generator/templates/ocaml/prime-factors/test.ml +1 -1
  24. data/tracks/ocaml/tools/test-generator/templates/ocaml/rectangles/test.ml +1 -1
  25. data/tracks/ocaml/tools/test-generator/templates/ocaml/run-length-encoding/test.ml +3 -3
  26. data/tracks/ocaml/tools/test-generator/templates/ocaml/say/test.ml +1 -1
  27. data/tracks/ocaml/tools/test-generator/templates/ocaml/word-count/test.ml +1 -1
  28. data/tracks/ocaml/tools/test-generator/test/beer-song.json +382 -31
  29. data/tracks/ocaml/tools/test-generator/test/clock.json +484 -333
  30. data/tracks/ocaml/tools/test-generator/test/difference_of_squares.json +38 -26
  31. data/tracks/ocaml/tools/test-generator/test/hello_world.json +12 -18
  32. data/tracks/ocaml/tools/test-generator/test/leap.json +33 -34
  33. data/tracks/ocaml/tools/test-generator/test/parser_test.ml +18 -14
  34. data/tracks/ocaml/tools/test-generator/test/with-methods-key.json +1 -1
  35. data/tracks/rust/exercises/allergies/Cargo.toml +1 -1
  36. data/tracks/rust/exercises/atbash-cipher/Cargo.toml +1 -1
  37. data/tracks/rust/exercises/binary-search/Cargo.toml +1 -1
  38. data/tracks/rust/exercises/bob/Cargo.toml +1 -1
  39. data/tracks/rust/exercises/bracket-push/Cargo.toml +1 -1
  40. data/tracks/rust/exercises/collatz-conjecture/Cargo.toml +1 -1
  41. data/tracks/rust/exercises/difference-of-squares/Cargo.toml +1 -1
  42. data/tracks/rust/exercises/dominoes/Cargo.toml +1 -1
  43. data/tracks/rust/exercises/gigasecond/Cargo.toml +1 -1
  44. data/tracks/rust/exercises/grains/Cargo.toml +1 -1
  45. data/tracks/rust/exercises/hello-world/Cargo.toml +1 -1
  46. data/tracks/rust/exercises/isogram/Cargo.toml +1 -1
  47. data/tracks/rust/exercises/largest-series-product/Cargo.toml +1 -1
  48. data/tracks/rust/exercises/minesweeper/Cargo.toml +1 -1
  49. data/tracks/rust/exercises/pascals-triangle/Cargo.toml +1 -1
  50. data/tracks/rust/exercises/perfect-numbers/Cargo.toml +1 -1
  51. data/tracks/rust/exercises/poker/Cargo.toml +1 -1
  52. data/tracks/rust/exercises/prime-factors/Cargo.toml +1 -1
  53. data/tracks/rust/exercises/queen-attack/Cargo.toml +1 -1
  54. data/tracks/rust/exercises/raindrops/Cargo.toml +1 -1
  55. data/tracks/rust/exercises/react/Cargo.toml +1 -1
  56. data/tracks/rust/exercises/rectangles/Cargo.toml +1 -1
  57. data/tracks/rust/exercises/robot-simulator/Cargo.toml +1 -1
  58. data/tracks/rust/exercises/run-length-encoding/Cargo.toml +1 -1
  59. data/tracks/rust/exercises/saddle-points/Cargo.toml +1 -1
  60. data/tracks/rust/exercises/say/Cargo.toml +1 -1
  61. data/tracks/rust/exercises/scrabble-score/Cargo.toml +1 -1
  62. data/tracks/rust/exercises/sieve/Cargo.toml +1 -1
  63. data/tracks/rust/exercises/space-age/Cargo.toml +1 -1
  64. data/tracks/rust/exercises/tournament/Cargo.toml +1 -1
  65. data/tracks/rust/exercises/variable-length-quantity/Cargo.toml +1 -1
  66. data/tracks/rust/exercises/wordy/Cargo.toml +1 -1
  67. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da54444d202b433b9ee9bb100327b34414d0531b
4
- data.tar.gz: 000c317771301c45e3daf54303e78ab478683b52
3
+ metadata.gz: 3036bb821ee32c887913d7896ef3433df01821d3
4
+ data.tar.gz: 374c6ddaecd208bf6192cb39c88c95e8c07dc209
5
5
  SHA512:
6
- metadata.gz: fdb9bb6fcb8d9ed1c4e0ec6351c515ea7ac408d9c194b5630c50605a90a4a15812a20e7f030e6afaab9f5bd1cb4ccde03c4a5ae46b380398774f19a3f0333b54
7
- data.tar.gz: 9bf8fc8e57ef319782b71621f288ecba9557e2f7cf6aad74ef931d7260d5908364480f25e477f5ef6e5602b7998ac9b7848ade3e6f9f723bea93305ba1e713ca
6
+ metadata.gz: b1110d7ba12be2e740884e5c73a74a2b11b9fca4ff42517f68174460064aab88ffc84af4af2b07289f0ec9e91d903a921aee60fad0e239976a491492bf8e1e0d
7
+ data.tar.gz: 30f98519f62e225ae41edb727517e9b7b9e340db588daa9625ed075e10f85bcb3be844e646c6f0d7e9a8172077bae86fd9acfbd7b0250c167e105aade9a54d86
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.108"
2
+ VERSION = "2.2.1.109"
3
3
  end
@@ -1 +1 @@
1
- 2.0.1
1
+ 2.1.0
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.2.0
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.2.0
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
@@ -28,3 +28,24 @@ let rec json_to_string (j: json): string = match j with
28
28
  | `List xs -> "[" ^ String.concat ~sep:"; " (List.map ~f:json_to_string xs) ^ "]"
29
29
  | `Assoc xs -> "[" ^ String.concat ~sep:"; "
30
30
  (List.map xs ~f:(fun (k,v) -> "(\"" ^ String.escaped k ^ "\", " ^ json_to_string v ^ ")")) ^ "]"
31
+
32
+ let list_to_string = String.concat ~sep:"; "
33
+
34
+ let json_assoc_to_string (xs: (string * json) list): string =
35
+ List.map xs ~f:(fun (k, j) -> k ^ ": " ^ (json_to_string j))
36
+ |> list_to_string
37
+
38
+ let case_to_string {description; parameters}: string =
39
+ "{description: " ^ description ^ "; parameters: " ^ (json_assoc_to_string parameters) ^ "}"
40
+
41
+ let cases_to_string cases = list_to_string (List.map ~f:case_to_string cases)
42
+
43
+ let test_to_string {name; cases}: string =
44
+ "{name: " ^ name ^ "; cases: " ^ (cases_to_string cases) ^ "}"
45
+
46
+ let tests_to_string tests: string =
47
+ "[" ^ list_to_string (List.map tests ~f:test_to_string) ^ "]"
48
+
49
+ let tests_to_string = function
50
+ | Single case -> cases_to_string case
51
+ | Suite tests -> tests_to_string tests
@@ -69,22 +69,22 @@ let edit_bowling_expected (value: json) = match value with
69
69
 
70
70
  let edit_say (ps: (string * json) list) =
71
71
  let edit = function
72
- | ("input", v) -> ("input", let v = json_to_string v in if Int.of_string v >= 0 then "(" ^ v ^ "L)" else v ^ "L")
72
+ | ("number", v) -> ("number", let v = json_to_string v in if Int.of_string v >= 0 then "(" ^ v ^ "L)" else v ^ "L")
73
73
  | ("expected", v) -> ("expected", optional_int_or_string ~none:(-1) v)
74
74
  | (k, ps) -> (k, json_to_string ps) in
75
75
  List.map ps ~f:edit
76
76
 
77
77
  let edit_all_your_base (ps: (string * json) list): (string * string) list =
78
78
  let edit = function
79
- | ("output_base", v) -> let v = json_to_string v in ("output_base", if Int.of_string v >= 0 then v else "(" ^ v ^ ")")
80
- | ("input_base", v) -> let v = json_to_string v in ("input_base", if Int.of_string v >= 0 then v else "(" ^ v ^ ")")
79
+ | ("outputBase", v) -> let v = json_to_string v in ("outputBase", if Int.of_string v >= 0 then v else "(" ^ v ^ ")")
80
+ | ("inputBase", v) -> let v = json_to_string v in ("inputBase", if Int.of_string v >= 0 then v else "(" ^ v ^ ")")
81
81
  | ("expected", v) -> ("expected", optional_int_list v)
82
82
  | (k, v) -> (k, json_to_string v) in
83
83
  List.map ps ~f:edit
84
84
 
85
85
  let edit_dominoes (ps: (string * json) list): (string * string) list =
86
86
  let edit (p: (string * json)) = match p with
87
- | ("input", `List j) -> ("input", "[" ^ (List.map ~f:two_elt_list_to_tuple j |> String.concat ~sep:"; ") ^ "]")
87
+ | ("dominoes", `List j) -> ("dominoes", "[" ^ (List.map ~f:two_elt_list_to_tuple j |> String.concat ~sep:"; ") ^ "]")
88
88
  | (k, v) -> (k, json_to_string v) in
89
89
  List.map ps ~f:edit
90
90
 
@@ -149,7 +149,6 @@ let ocaml_edit_parameters ~(slug: string) (parameters: (string * json) list) = m
149
149
  | ("dominoes", ps) -> edit_dominoes ps
150
150
  | ("forth", ps) -> edit_expected ~f:option_of_null ps
151
151
  | ("hamming", ps) -> edit_expected ~f:(optional_int ~none:(-1)) ps
152
- | ("hello-world", ps) -> default_value ~key:"name" ~value:"None" (optional_strings ~f:(fun _ -> true) parameters)
153
152
  | ("palindrome-products", ps) -> edit_palindrome_products ps
154
153
  | ("phone-number", ps) -> edit_expected ~f:option_of_null ps
155
154
  | ("say", ps) -> edit_say ps
@@ -8,12 +8,22 @@ type error =
8
8
  TestMustHaveKeyCalledCases of string | ExpectingListOfCases | ExpectingMapForCase |
9
9
  NoDescription | BadDescription | UnrecognizedJson [@@deriving eq, show]
10
10
 
11
+ let extract_parameters case =
12
+ let open Result.Monad_infix in
13
+ find_note case "input" UnrecognizedJson >>= fun input ->
14
+ let input = to_assoc_note UnrecognizedJson input in
15
+ find_note case "expected" UnrecognizedJson >>= fun expected ->
16
+ match input with
17
+ | Ok input -> Ok (("expected", expected) :: input)
18
+ | e -> e
19
+
11
20
  let parse_case_assoc (parameters: (string * json) list): (case, error) Result.t =
12
21
  let find name e = List.Assoc.find parameters ~equal:String.equal name |> Result.of_option ~error:e in
13
22
  let test_parameters = List.Assoc.remove parameters ~equal:String.equal "description" in
14
23
  let open Result.Monad_infix in
15
24
  find "description" NoDescription >>=
16
25
  to_string_note BadDescription >>= fun description ->
26
+ extract_parameters test_parameters >>= fun test_parameters ->
17
27
  Ok {description = description; parameters = test_parameters}
18
28
 
19
29
  let parse_case (s: json): (case, error) Result.t = match s with
@@ -22,8 +32,8 @@ let parse_case (s: json): (case, error) Result.t = match s with
22
32
 
23
33
  let parse_cases (text: string) (cases_key: string): (json, error) Result.t =
24
34
  match from_string text |> member cases_key with
25
- | `Null -> Error (TestMustHaveKeyCalledCases cases_key)
26
- | json -> Ok json
35
+ | `Null -> Error (TestMustHaveKeyCalledCases cases_key)
36
+ | json -> Ok json
27
37
 
28
38
  let parse_single (text: string) (cases_key: string): (tests, error) Result.t =
29
39
  let open Result.Monad_infix in
@@ -37,11 +47,13 @@ let rec to_cases case: (case list, error) Result.t =
37
47
  find_note case "description" NoDescription >>= to_string_note BadDescription >>= fun desc ->
38
48
  let cases = List.Assoc.find case ~equal:String.equal "cases" in
39
49
  match cases with
40
- | Some cases -> to_list_note UnrecognizedJson cases >>= fun cases ->
50
+ | Some cases ->
51
+ to_list_note UnrecognizedJson cases >>= fun cases ->
41
52
  List.map cases ~f:(to_assoc_note UnrecognizedJson) |> sequence >>= fun x ->
42
53
  List.map x ~f:to_cases |> sequence |> Result.map ~f:List.concat
43
54
  | None ->
44
- Result.return [{description = desc; parameters = case}]
55
+ extract_parameters case >>= fun parameters ->
56
+ Result.return [{description = desc; parameters = parameters}]
45
57
 
46
58
  let convert_cases_description_to_name desc =
47
59
  String.lowercase desc |> String.substr_replace_all ~pattern:" " ~with_:"_"
@@ -13,7 +13,7 @@ let is_directory =
13
13
 
14
14
  let home_dir = Option.value_exn (Sys.getenv "HOME")
15
15
 
16
- let default_generated name = Option.value ~default:(home_dir ^ "/.x" ^ name ^ "-generated")
16
+ let default_generated name = Option.value ~default:(home_dir ^ "/.exercism-" ^ name ^ "-generated")
17
17
 
18
18
  let command =
19
19
  let open Command.Let_syntax in
@@ -23,7 +23,7 @@ let command =
23
23
  [%map_open
24
24
  let language = flag "l" (optional string) ~doc:"language to generate tests for"
25
25
  and templates_folder = flag "t" (optional_with_default "./templates" is_directory) ~doc:"string Directory containing templates."
26
- and canonical_data_folder = flag "c" (optional_with_default "./templates" is_directory) ~doc:"string Directory containing templates."
26
+ and canonical_data_folder = flag "c" (optional_with_default "../../../problem-specifications/exercises" is_directory) ~doc:"string Directory containing canonical data."
27
27
  and output_folder = flag "-o" (optional string) ~doc:"string Directory to output generated tests."
28
28
  and generated_folder = flag "-g" (optional string) ~doc:"string Directory to backup generated tests."
29
29
  and filter = flag "-f" (optional string) ~doc:"string Filter out files not matching this string."
@@ -54,4 +54,4 @@ let find_arrayi ?start:(start = 0) xs ~f =
54
54
  if i >= Array.length xs then None
55
55
  else if f xs.(i) then Some (i, xs.(i))
56
56
  else go (i + 1) in
57
- go start
57
+ go start
@@ -12,7 +12,7 @@ let ae exp got _test_ctxt =
12
12
  let tests = [
13
13
  (* TEST
14
14
  "$description" >::
15
- ae $expected (convert_bases ~from:$input_base ~digits:$input_digits ~target:$output_base);
15
+ ae $expected (convert_bases ~from:$inputBase ~digits:$digits ~target:$outputBase);
16
16
  END TEST *)
17
17
  ]
18
18
 
@@ -1,12 +1,12 @@
1
1
  open OUnit2
2
2
  open Bob
3
3
 
4
- let ae exp got _test_ctxt = assert_equal ~printer:String.to_string exp got
4
+ let ae exp got _test_ctxt = assert_equal ~printer:(fun x -> x) exp got
5
5
 
6
6
  let tests = [
7
7
  (* TEST
8
8
  "$description" >::
9
- ae $expected (response_for $input);
9
+ ae $expected (response_for $heyBob);
10
10
  END TEST *)
11
11
  ]
12
12
 
@@ -8,7 +8,7 @@ let ae exp got _test_ctxt =
8
8
  let tests = [
9
9
  (* TEST
10
10
  "$description" >::
11
- ae $expected (are_balanced $input);
11
+ ae $expected (are_balanced $value);
12
12
  END TEST *)
13
13
  ]
14
14
 
@@ -38,7 +38,7 @@ let assert_chain input hasChain =
38
38
  let tests = [
39
39
  (* TEST
40
40
  "$description" >::
41
- assert_chain $input $expected;
41
+ assert_chain $dominoes $expected;
42
42
  END TEST *)
43
43
  ]
44
44
 
@@ -2,12 +2,12 @@ open Core
2
2
  open OUnit2
3
3
  open Leap
4
4
 
5
- let ae exp got _test_ctxt = assert_equal exp got ~printer:Int.to_string
5
+ let ae exp got _test_ctxt = assert_equal exp got ~printer:Bool.to_string
6
6
 
7
7
  let tests = [
8
8
  (* TEST
9
9
  "$description" >::
10
- ae $expected (leap_year $input);
10
+ ae $expected (leap_year $year);
11
11
  END TEST *)
12
12
  ]
13
13
 
@@ -8,7 +8,7 @@ let assert_valid expected input _test_ctxt =
8
8
  let tests = [
9
9
  (* TEST
10
10
  "$description" >::
11
- assert_valid $expected $input;
11
+ assert_valid $expected $value;
12
12
  END TEST *)
13
13
  ]
14
14
 
@@ -17,7 +17,7 @@ let ae exp got =
17
17
  let tests = [
18
18
  (* TEST
19
19
  "$description" >:: (fun _ ->
20
- let b = $input in
20
+ let b = $minefield in
21
21
  let expected = $expected in
22
22
  ae expected (annotate b)
23
23
  );
@@ -17,7 +17,7 @@ let tests = [
17
17
  (* TEST
18
18
  "$description" >::
19
19
  ae ($expected)
20
- ($property ~min:$input_min ~max:$input_max);
20
+ ($property ~min:$min ~max:$max);
21
21
  END TEST *)
22
22
  ]
23
23
 
@@ -7,7 +7,7 @@ let ae exp got _test_ctxt = assert_equal ~printer:Bool.to_string exp got
7
7
  let tests = [
8
8
  (* TEST
9
9
  "$description" >::
10
- ae $expected (is_pangram $input);
10
+ ae $expected (is_pangram $sentence);
11
11
  END TEST *)
12
12
  ]
13
13
 
@@ -17,7 +17,7 @@ let to_int64s = List.map ~f:Int64.of_int
17
17
  let tests = [
18
18
  (* TEST
19
19
  "$description" >::
20
- ae (to_int64s $expected) (factors_of $(input)L);
20
+ ae (to_int64s $expected) (factors_of $(value)L);
21
21
  END TEST *)
22
22
  ]
23
23
 
@@ -7,7 +7,7 @@ let ae exp got _test_ctxt = assert_equal exp got ~printer:Int.to_string
7
7
  let tests = [
8
8
  (* TEST
9
9
  "$description" >::
10
- ae $expected (count_rectangles $input);
10
+ ae $expected (count_rectangles $strings);
11
11
  END TEST *)
12
12
  ]
13
13
 
@@ -7,7 +7,7 @@ let ae exp got _test_ctxt = assert_equal exp got ~printer:Fn.id
7
7
  let (* SUITE run-length_encode_a_string *)encode_tests = [
8
8
  (* TEST
9
9
  "$description" >::
10
- ae $expected (encode $input);
10
+ ae $expected (encode $string);
11
11
  END TEST *)
12
12
  ]
13
13
  (* END SUITE *)
@@ -15,7 +15,7 @@ let (* SUITE run-length_encode_a_string *)encode_tests = [
15
15
  let (* SUITE run-length_decode_a_string *)decode_tests = [
16
16
  (* TEST
17
17
  "$description" >::
18
- ae $expected (decode $input);
18
+ ae $expected (decode $string);
19
19
  END TEST *)
20
20
  ]
21
21
  (* END SUITE *)
@@ -23,7 +23,7 @@ let (* SUITE run-length_decode_a_string *)decode_tests = [
23
23
  let (* SUITE encode_and_then_decode *)encode_and_then_decode_tests = [
24
24
  (* TEST
25
25
  "$description" >::
26
- ae $expected (encode $input |> decode);
26
+ ae $expected (encode $string |> decode);
27
27
  END TEST *)
28
28
  ]
29
29
  (* END SUITE *)
@@ -8,7 +8,7 @@ let tests = [
8
8
  (* TEST
9
9
  "$description" >:: (
10
10
  ae $expected
11
- (in_english $input));
11
+ (in_english $number));
12
12
  END TEST *)
13
13
  "all numbers from 1 to 10_000 can be spelt">::(fun _ ->
14
14
  assert_bool "range test" (Sequence.range 0 10_000
@@ -12,7 +12,7 @@ let tests = [
12
12
  (* TEST
13
13
  "$description" >::
14
14
  ae $expected
15
- (word_count $input);
15
+ (word_count $sentence);
16
16
  END TEST *)
17
17
  ]
18
18
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "exercise": "beer-song",
3
- "version": "1.0.0",
3
+ "version": "2.1.0",
4
4
  "cases": [
5
5
  {
6
6
  "description": "verse",
@@ -10,33 +10,63 @@
10
10
  "cases": [
11
11
  {
12
12
  "description": "first generic verse",
13
- "property": "verse",
14
- "number": 99,
15
- "expected": "99 bottles of beer on the wall, 99 bottles of beer.\nTake one down and pass it around, 98 bottles of beer on the wall.\n"
13
+ "property": "recite",
14
+ "input": {
15
+ "startBottles": 99,
16
+ "takeDown": 1
17
+ },
18
+ "expected": [
19
+ "99 bottles of beer on the wall, 99 bottles of beer.",
20
+ "Take one down and pass it around, 98 bottles of beer on the wall."
21
+ ]
16
22
  },
17
23
  {
18
24
  "description": "last generic verse",
19
- "property": "verse",
20
- "number": 3,
21
- "expected": "3 bottles of beer on the wall, 3 bottles of beer.\nTake one down and pass it around, 2 bottles of beer on the wall.\n"
25
+ "property": "recite",
26
+ "input": {
27
+ "startBottles": 3,
28
+ "takeDown": 1
29
+ },
30
+ "expected": [
31
+ "3 bottles of beer on the wall, 3 bottles of beer.",
32
+ "Take one down and pass it around, 2 bottles of beer on the wall."
33
+ ]
22
34
  },
23
35
  {
24
- "description": "verse 2",
25
- "property": "verse",
26
- "number": 2,
27
- "expected": "2 bottles of beer on the wall, 2 bottles of beer.\nTake one down and pass it around, 1 bottle of beer on the wall.\n"
36
+ "description": "verse with 2 bottles",
37
+ "property": "recite",
38
+ "input": {
39
+ "startBottles": 2,
40
+ "takeDown": 1
41
+ },
42
+ "expected": [
43
+ "2 bottles of beer on the wall, 2 bottles of beer.",
44
+ "Take one down and pass it around, 1 bottle of beer on the wall."
45
+ ]
28
46
  },
29
47
  {
30
- "description": "verse 1",
31
- "property": "verse",
32
- "number": 1,
33
- "expected": "1 bottle of beer on the wall, 1 bottle of beer.\nTake it down and pass it around, no more bottles of beer on the wall.\n"
48
+ "description": "verse with 1 bottle",
49
+ "property": "recite",
50
+ "input": {
51
+ "startBottles": 1,
52
+ "takeDown": 1
53
+ },
54
+ "expected": [
55
+ "1 bottle of beer on the wall, 1 bottle of beer.",
56
+ "Take it down and pass it around, no more bottles of beer on the wall."
57
+ ]
34
58
  },
35
59
  {
36
- "description": "verse 0",
37
- "property": "verse",
38
- "number": 0,
39
- "expected": "No more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.\n"
60
+ "description": "verse with 0 bottles",
61
+ "property": "recite",
62
+ "input": {
63
+ "startBottles": 0,
64
+ "takeDown": 1
65
+ },
66
+ "expected": [
67
+ "No more bottles of beer on the wall, no more bottles of beer.",
68
+ "Go to the store and buy some more, 99 bottles of beer on the wall."
69
+ ]
40
70
  }
41
71
  ]
42
72
  }
@@ -50,24 +80,345 @@
50
80
  "cases": [
51
81
  {
52
82
  "description": "first two verses",
53
- "property": "verses",
54
- "beginning": 99,
55
- "end": 98,
56
- "expected": "99 bottles of beer on the wall, 99 bottles of beer.\nTake one down and pass it around, 98 bottles of beer on the wall.\n\n98 bottles of beer on the wall, 98 bottles of beer.\nTake one down and pass it around, 97 bottles of beer on the wall.\n"
83
+ "property": "recite",
84
+ "input": {
85
+ "startBottles": 99,
86
+ "takeDown": 2
87
+ },
88
+ "expected": [
89
+ "99 bottles of beer on the wall, 99 bottles of beer.",
90
+ "Take one down and pass it around, 98 bottles of beer on the wall.",
91
+ "",
92
+ "98 bottles of beer on the wall, 98 bottles of beer.",
93
+ "Take one down and pass it around, 97 bottles of beer on the wall."
94
+ ]
57
95
  },
58
96
  {
59
97
  "description": "last three verses",
60
- "property": "verses",
61
- "beginning": 2,
62
- "end": 0,
63
- "expected": "2 bottles of beer on the wall, 2 bottles of beer.\nTake one down and pass it around, 1 bottle of beer on the wall.\n\n1 bottle of beer on the wall, 1 bottle of beer.\nTake it down and pass it around, no more bottles of beer on the wall.\n\nNo more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.\n"
98
+ "property": "recite",
99
+ "input": {
100
+ "startBottles": 2,
101
+ "takeDown": 3
102
+ },
103
+ "expected": [
104
+ "2 bottles of beer on the wall, 2 bottles of beer.",
105
+ "Take one down and pass it around, 1 bottle of beer on the wall.",
106
+ "",
107
+ "1 bottle of beer on the wall, 1 bottle of beer.",
108
+ "Take it down and pass it around, no more bottles of beer on the wall.",
109
+ "",
110
+ "No more bottles of beer on the wall, no more bottles of beer.",
111
+ "Go to the store and buy some more, 99 bottles of beer on the wall."
112
+ ]
64
113
  },
65
114
  {
66
115
  "description": "all verses",
67
- "property": "verses",
68
- "beginning": 99,
69
- "end": 0,
70
- "expected": "99 bottles of beer on the wall, 99 bottles of beer.\nTake one down and pass it around, 98 bottles of beer on the wall.\n\n98 bottles of beer on the wall, 98 bottles of beer.\nTake one down and pass it around, 97 bottles of beer on the wall.\n\n97 bottles of beer on the wall, 97 bottles of beer.\nTake one down and pass it around, 96 bottles of beer on the wall.\n\n96 bottles of beer on the wall, 96 bottles of beer.\nTake one down and pass it around, 95 bottles of beer on the wall.\n\n95 bottles of beer on the wall, 95 bottles of beer.\nTake one down and pass it around, 94 bottles of beer on the wall.\n\n94 bottles of beer on the wall, 94 bottles of beer.\nTake one down and pass it around, 93 bottles of beer on the wall.\n\n93 bottles of beer on the wall, 93 bottles of beer.\nTake one down and pass it around, 92 bottles of beer on the wall.\n\n92 bottles of beer on the wall, 92 bottles of beer.\nTake one down and pass it around, 91 bottles of beer on the wall.\n\n91 bottles of beer on the wall, 91 bottles of beer.\nTake one down and pass it around, 90 bottles of beer on the wall.\n\n90 bottles of beer on the wall, 90 bottles of beer.\nTake one down and pass it around, 89 bottles of beer on the wall.\n\n89 bottles of beer on the wall, 89 bottles of beer.\nTake one down and pass it around, 88 bottles of beer on the wall.\n\n88 bottles of beer on the wall, 88 bottles of beer.\nTake one down and pass it around, 87 bottles of beer on the wall.\n\n87 bottles of beer on the wall, 87 bottles of beer.\nTake one down and pass it around, 86 bottles of beer on the wall.\n\n86 bottles of beer on the wall, 86 bottles of beer.\nTake one down and pass it around, 85 bottles of beer on the wall.\n\n85 bottles of beer on the wall, 85 bottles of beer.\nTake one down and pass it around, 84 bottles of beer on the wall.\n\n84 bottles of beer on the wall, 84 bottles of beer.\nTake one down and pass it around, 83 bottles of beer on the wall.\n\n83 bottles of beer on the wall, 83 bottles of beer.\nTake one down and pass it around, 82 bottles of beer on the wall.\n\n82 bottles of beer on the wall, 82 bottles of beer.\nTake one down and pass it around, 81 bottles of beer on the wall.\n\n81 bottles of beer on the wall, 81 bottles of beer.\nTake one down and pass it around, 80 bottles of beer on the wall.\n\n80 bottles of beer on the wall, 80 bottles of beer.\nTake one down and pass it around, 79 bottles of beer on the wall.\n\n79 bottles of beer on the wall, 79 bottles of beer.\nTake one down and pass it around, 78 bottles of beer on the wall.\n\n78 bottles of beer on the wall, 78 bottles of beer.\nTake one down and pass it around, 77 bottles of beer on the wall.\n\n77 bottles of beer on the wall, 77 bottles of beer.\nTake one down and pass it around, 76 bottles of beer on the wall.\n\n76 bottles of beer on the wall, 76 bottles of beer.\nTake one down and pass it around, 75 bottles of beer on the wall.\n\n75 bottles of beer on the wall, 75 bottles of beer.\nTake one down and pass it around, 74 bottles of beer on the wall.\n\n74 bottles of beer on the wall, 74 bottles of beer.\nTake one down and pass it around, 73 bottles of beer on the wall.\n\n73 bottles of beer on the wall, 73 bottles of beer.\nTake one down and pass it around, 72 bottles of beer on the wall.\n\n72 bottles of beer on the wall, 72 bottles of beer.\nTake one down and pass it around, 71 bottles of beer on the wall.\n\n71 bottles of beer on the wall, 71 bottles of beer.\nTake one down and pass it around, 70 bottles of beer on the wall.\n\n70 bottles of beer on the wall, 70 bottles of beer.\nTake one down and pass it around, 69 bottles of beer on the wall.\n\n69 bottles of beer on the wall, 69 bottles of beer.\nTake one down and pass it around, 68 bottles of beer on the wall.\n\n68 bottles of beer on the wall, 68 bottles of beer.\nTake one down and pass it around, 67 bottles of beer on the wall.\n\n67 bottles of beer on the wall, 67 bottles of beer.\nTake one down and pass it around, 66 bottles of beer on the wall.\n\n66 bottles of beer on the wall, 66 bottles of beer.\nTake one down and pass it around, 65 bottles of beer on the wall.\n\n65 bottles of beer on the wall, 65 bottles of beer.\nTake one down and pass it around, 64 bottles of beer on the wall.\n\n64 bottles of beer on the wall, 64 bottles of beer.\nTake one down and pass it around, 63 bottles of beer on the wall.\n\n63 bottles of beer on the wall, 63 bottles of beer.\nTake one down and pass it around, 62 bottles of beer on the wall.\n\n62 bottles of beer on the wall, 62 bottles of beer.\nTake one down and pass it around, 61 bottles of beer on the wall.\n\n61 bottles of beer on the wall, 61 bottles of beer.\nTake one down and pass it around, 60 bottles of beer on the wall.\n\n60 bottles of beer on the wall, 60 bottles of beer.\nTake one down and pass it around, 59 bottles of beer on the wall.\n\n59 bottles of beer on the wall, 59 bottles of beer.\nTake one down and pass it around, 58 bottles of beer on the wall.\n\n58 bottles of beer on the wall, 58 bottles of beer.\nTake one down and pass it around, 57 bottles of beer on the wall.\n\n57 bottles of beer on the wall, 57 bottles of beer.\nTake one down and pass it around, 56 bottles of beer on the wall.\n\n56 bottles of beer on the wall, 56 bottles of beer.\nTake one down and pass it around, 55 bottles of beer on the wall.\n\n55 bottles of beer on the wall, 55 bottles of beer.\nTake one down and pass it around, 54 bottles of beer on the wall.\n\n54 bottles of beer on the wall, 54 bottles of beer.\nTake one down and pass it around, 53 bottles of beer on the wall.\n\n53 bottles of beer on the wall, 53 bottles of beer.\nTake one down and pass it around, 52 bottles of beer on the wall.\n\n52 bottles of beer on the wall, 52 bottles of beer.\nTake one down and pass it around, 51 bottles of beer on the wall.\n\n51 bottles of beer on the wall, 51 bottles of beer.\nTake one down and pass it around, 50 bottles of beer on the wall.\n\n50 bottles of beer on the wall, 50 bottles of beer.\nTake one down and pass it around, 49 bottles of beer on the wall.\n\n49 bottles of beer on the wall, 49 bottles of beer.\nTake one down and pass it around, 48 bottles of beer on the wall.\n\n48 bottles of beer on the wall, 48 bottles of beer.\nTake one down and pass it around, 47 bottles of beer on the wall.\n\n47 bottles of beer on the wall, 47 bottles of beer.\nTake one down and pass it around, 46 bottles of beer on the wall.\n\n46 bottles of beer on the wall, 46 bottles of beer.\nTake one down and pass it around, 45 bottles of beer on the wall.\n\n45 bottles of beer on the wall, 45 bottles of beer.\nTake one down and pass it around, 44 bottles of beer on the wall.\n\n44 bottles of beer on the wall, 44 bottles of beer.\nTake one down and pass it around, 43 bottles of beer on the wall.\n\n43 bottles of beer on the wall, 43 bottles of beer.\nTake one down and pass it around, 42 bottles of beer on the wall.\n\n42 bottles of beer on the wall, 42 bottles of beer.\nTake one down and pass it around, 41 bottles of beer on the wall.\n\n41 bottles of beer on the wall, 41 bottles of beer.\nTake one down and pass it around, 40 bottles of beer on the wall.\n\n40 bottles of beer on the wall, 40 bottles of beer.\nTake one down and pass it around, 39 bottles of beer on the wall.\n\n39 bottles of beer on the wall, 39 bottles of beer.\nTake one down and pass it around, 38 bottles of beer on the wall.\n\n38 bottles of beer on the wall, 38 bottles of beer.\nTake one down and pass it around, 37 bottles of beer on the wall.\n\n37 bottles of beer on the wall, 37 bottles of beer.\nTake one down and pass it around, 36 bottles of beer on the wall.\n\n36 bottles of beer on the wall, 36 bottles of beer.\nTake one down and pass it around, 35 bottles of beer on the wall.\n\n35 bottles of beer on the wall, 35 bottles of beer.\nTake one down and pass it around, 34 bottles of beer on the wall.\n\n34 bottles of beer on the wall, 34 bottles of beer.\nTake one down and pass it around, 33 bottles of beer on the wall.\n\n33 bottles of beer on the wall, 33 bottles of beer.\nTake one down and pass it around, 32 bottles of beer on the wall.\n\n32 bottles of beer on the wall, 32 bottles of beer.\nTake one down and pass it around, 31 bottles of beer on the wall.\n\n31 bottles of beer on the wall, 31 bottles of beer.\nTake one down and pass it around, 30 bottles of beer on the wall.\n\n30 bottles of beer on the wall, 30 bottles of beer.\nTake one down and pass it around, 29 bottles of beer on the wall.\n\n29 bottles of beer on the wall, 29 bottles of beer.\nTake one down and pass it around, 28 bottles of beer on the wall.\n\n28 bottles of beer on the wall, 28 bottles of beer.\nTake one down and pass it around, 27 bottles of beer on the wall.\n\n27 bottles of beer on the wall, 27 bottles of beer.\nTake one down and pass it around, 26 bottles of beer on the wall.\n\n26 bottles of beer on the wall, 26 bottles of beer.\nTake one down and pass it around, 25 bottles of beer on the wall.\n\n25 bottles of beer on the wall, 25 bottles of beer.\nTake one down and pass it around, 24 bottles of beer on the wall.\n\n24 bottles of beer on the wall, 24 bottles of beer.\nTake one down and pass it around, 23 bottles of beer on the wall.\n\n23 bottles of beer on the wall, 23 bottles of beer.\nTake one down and pass it around, 22 bottles of beer on the wall.\n\n22 bottles of beer on the wall, 22 bottles of beer.\nTake one down and pass it around, 21 bottles of beer on the wall.\n\n21 bottles of beer on the wall, 21 bottles of beer.\nTake one down and pass it around, 20 bottles of beer on the wall.\n\n20 bottles of beer on the wall, 20 bottles of beer.\nTake one down and pass it around, 19 bottles of beer on the wall.\n\n19 bottles of beer on the wall, 19 bottles of beer.\nTake one down and pass it around, 18 bottles of beer on the wall.\n\n18 bottles of beer on the wall, 18 bottles of beer.\nTake one down and pass it around, 17 bottles of beer on the wall.\n\n17 bottles of beer on the wall, 17 bottles of beer.\nTake one down and pass it around, 16 bottles of beer on the wall.\n\n16 bottles of beer on the wall, 16 bottles of beer.\nTake one down and pass it around, 15 bottles of beer on the wall.\n\n15 bottles of beer on the wall, 15 bottles of beer.\nTake one down and pass it around, 14 bottles of beer on the wall.\n\n14 bottles of beer on the wall, 14 bottles of beer.\nTake one down and pass it around, 13 bottles of beer on the wall.\n\n13 bottles of beer on the wall, 13 bottles of beer.\nTake one down and pass it around, 12 bottles of beer on the wall.\n\n12 bottles of beer on the wall, 12 bottles of beer.\nTake one down and pass it around, 11 bottles of beer on the wall.\n\n11 bottles of beer on the wall, 11 bottles of beer.\nTake one down and pass it around, 10 bottles of beer on the wall.\n\n10 bottles of beer on the wall, 10 bottles of beer.\nTake one down and pass it around, 9 bottles of beer on the wall.\n\n9 bottles of beer on the wall, 9 bottles of beer.\nTake one down and pass it around, 8 bottles of beer on the wall.\n\n8 bottles of beer on the wall, 8 bottles of beer.\nTake one down and pass it around, 7 bottles of beer on the wall.\n\n7 bottles of beer on the wall, 7 bottles of beer.\nTake one down and pass it around, 6 bottles of beer on the wall.\n\n6 bottles of beer on the wall, 6 bottles of beer.\nTake one down and pass it around, 5 bottles of beer on the wall.\n\n5 bottles of beer on the wall, 5 bottles of beer.\nTake one down and pass it around, 4 bottles of beer on the wall.\n\n4 bottles of beer on the wall, 4 bottles of beer.\nTake one down and pass it around, 3 bottles of beer on the wall.\n\n3 bottles of beer on the wall, 3 bottles of beer.\nTake one down and pass it around, 2 bottles of beer on the wall.\n\n2 bottles of beer on the wall, 2 bottles of beer.\nTake one down and pass it around, 1 bottle of beer on the wall.\n\n1 bottle of beer on the wall, 1 bottle of beer.\nTake it down and pass it around, no more bottles of beer on the wall.\n\nNo more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.\n"
116
+ "property": "recite",
117
+ "input": {
118
+ "startBottles": 99,
119
+ "takeDown": 100
120
+ },
121
+ "expected": [
122
+ "99 bottles of beer on the wall, 99 bottles of beer.",
123
+ "Take one down and pass it around, 98 bottles of beer on the wall.",
124
+ "",
125
+ "98 bottles of beer on the wall, 98 bottles of beer.",
126
+ "Take one down and pass it around, 97 bottles of beer on the wall.",
127
+ "",
128
+ "97 bottles of beer on the wall, 97 bottles of beer.",
129
+ "Take one down and pass it around, 96 bottles of beer on the wall.",
130
+ "",
131
+ "96 bottles of beer on the wall, 96 bottles of beer.",
132
+ "Take one down and pass it around, 95 bottles of beer on the wall.",
133
+ "",
134
+ "95 bottles of beer on the wall, 95 bottles of beer.",
135
+ "Take one down and pass it around, 94 bottles of beer on the wall.",
136
+ "",
137
+ "94 bottles of beer on the wall, 94 bottles of beer.",
138
+ "Take one down and pass it around, 93 bottles of beer on the wall.",
139
+ "",
140
+ "93 bottles of beer on the wall, 93 bottles of beer.",
141
+ "Take one down and pass it around, 92 bottles of beer on the wall.",
142
+ "",
143
+ "92 bottles of beer on the wall, 92 bottles of beer.",
144
+ "Take one down and pass it around, 91 bottles of beer on the wall.",
145
+ "",
146
+ "91 bottles of beer on the wall, 91 bottles of beer.",
147
+ "Take one down and pass it around, 90 bottles of beer on the wall.",
148
+ "",
149
+ "90 bottles of beer on the wall, 90 bottles of beer.",
150
+ "Take one down and pass it around, 89 bottles of beer on the wall.",
151
+ "",
152
+ "89 bottles of beer on the wall, 89 bottles of beer.",
153
+ "Take one down and pass it around, 88 bottles of beer on the wall.",
154
+ "",
155
+ "88 bottles of beer on the wall, 88 bottles of beer.",
156
+ "Take one down and pass it around, 87 bottles of beer on the wall.",
157
+ "",
158
+ "87 bottles of beer on the wall, 87 bottles of beer.",
159
+ "Take one down and pass it around, 86 bottles of beer on the wall.",
160
+ "",
161
+ "86 bottles of beer on the wall, 86 bottles of beer.",
162
+ "Take one down and pass it around, 85 bottles of beer on the wall.",
163
+ "",
164
+ "85 bottles of beer on the wall, 85 bottles of beer.",
165
+ "Take one down and pass it around, 84 bottles of beer on the wall.",
166
+ "",
167
+ "84 bottles of beer on the wall, 84 bottles of beer.",
168
+ "Take one down and pass it around, 83 bottles of beer on the wall.",
169
+ "",
170
+ "83 bottles of beer on the wall, 83 bottles of beer.",
171
+ "Take one down and pass it around, 82 bottles of beer on the wall.",
172
+ "",
173
+ "82 bottles of beer on the wall, 82 bottles of beer.",
174
+ "Take one down and pass it around, 81 bottles of beer on the wall.",
175
+ "",
176
+ "81 bottles of beer on the wall, 81 bottles of beer.",
177
+ "Take one down and pass it around, 80 bottles of beer on the wall.",
178
+ "",
179
+ "80 bottles of beer on the wall, 80 bottles of beer.",
180
+ "Take one down and pass it around, 79 bottles of beer on the wall.",
181
+ "",
182
+ "79 bottles of beer on the wall, 79 bottles of beer.",
183
+ "Take one down and pass it around, 78 bottles of beer on the wall.",
184
+ "",
185
+ "78 bottles of beer on the wall, 78 bottles of beer.",
186
+ "Take one down and pass it around, 77 bottles of beer on the wall.",
187
+ "",
188
+ "77 bottles of beer on the wall, 77 bottles of beer.",
189
+ "Take one down and pass it around, 76 bottles of beer on the wall.",
190
+ "",
191
+ "76 bottles of beer on the wall, 76 bottles of beer.",
192
+ "Take one down and pass it around, 75 bottles of beer on the wall.",
193
+ "",
194
+ "75 bottles of beer on the wall, 75 bottles of beer.",
195
+ "Take one down and pass it around, 74 bottles of beer on the wall.",
196
+ "",
197
+ "74 bottles of beer on the wall, 74 bottles of beer.",
198
+ "Take one down and pass it around, 73 bottles of beer on the wall.",
199
+ "",
200
+ "73 bottles of beer on the wall, 73 bottles of beer.",
201
+ "Take one down and pass it around, 72 bottles of beer on the wall.",
202
+ "",
203
+ "72 bottles of beer on the wall, 72 bottles of beer.",
204
+ "Take one down and pass it around, 71 bottles of beer on the wall.",
205
+ "",
206
+ "71 bottles of beer on the wall, 71 bottles of beer.",
207
+ "Take one down and pass it around, 70 bottles of beer on the wall.",
208
+ "",
209
+ "70 bottles of beer on the wall, 70 bottles of beer.",
210
+ "Take one down and pass it around, 69 bottles of beer on the wall.",
211
+ "",
212
+ "69 bottles of beer on the wall, 69 bottles of beer.",
213
+ "Take one down and pass it around, 68 bottles of beer on the wall.",
214
+ "",
215
+ "68 bottles of beer on the wall, 68 bottles of beer.",
216
+ "Take one down and pass it around, 67 bottles of beer on the wall.",
217
+ "",
218
+ "67 bottles of beer on the wall, 67 bottles of beer.",
219
+ "Take one down and pass it around, 66 bottles of beer on the wall.",
220
+ "",
221
+ "66 bottles of beer on the wall, 66 bottles of beer.",
222
+ "Take one down and pass it around, 65 bottles of beer on the wall.",
223
+ "",
224
+ "65 bottles of beer on the wall, 65 bottles of beer.",
225
+ "Take one down and pass it around, 64 bottles of beer on the wall.",
226
+ "",
227
+ "64 bottles of beer on the wall, 64 bottles of beer.",
228
+ "Take one down and pass it around, 63 bottles of beer on the wall.",
229
+ "",
230
+ "63 bottles of beer on the wall, 63 bottles of beer.",
231
+ "Take one down and pass it around, 62 bottles of beer on the wall.",
232
+ "",
233
+ "62 bottles of beer on the wall, 62 bottles of beer.",
234
+ "Take one down and pass it around, 61 bottles of beer on the wall.",
235
+ "",
236
+ "61 bottles of beer on the wall, 61 bottles of beer.",
237
+ "Take one down and pass it around, 60 bottles of beer on the wall.",
238
+ "",
239
+ "60 bottles of beer on the wall, 60 bottles of beer.",
240
+ "Take one down and pass it around, 59 bottles of beer on the wall.",
241
+ "",
242
+ "59 bottles of beer on the wall, 59 bottles of beer.",
243
+ "Take one down and pass it around, 58 bottles of beer on the wall.",
244
+ "",
245
+ "58 bottles of beer on the wall, 58 bottles of beer.",
246
+ "Take one down and pass it around, 57 bottles of beer on the wall.",
247
+ "",
248
+ "57 bottles of beer on the wall, 57 bottles of beer.",
249
+ "Take one down and pass it around, 56 bottles of beer on the wall.",
250
+ "",
251
+ "56 bottles of beer on the wall, 56 bottles of beer.",
252
+ "Take one down and pass it around, 55 bottles of beer on the wall.",
253
+ "",
254
+ "55 bottles of beer on the wall, 55 bottles of beer.",
255
+ "Take one down and pass it around, 54 bottles of beer on the wall.",
256
+ "",
257
+ "54 bottles of beer on the wall, 54 bottles of beer.",
258
+ "Take one down and pass it around, 53 bottles of beer on the wall.",
259
+ "",
260
+ "53 bottles of beer on the wall, 53 bottles of beer.",
261
+ "Take one down and pass it around, 52 bottles of beer on the wall.",
262
+ "",
263
+ "52 bottles of beer on the wall, 52 bottles of beer.",
264
+ "Take one down and pass it around, 51 bottles of beer on the wall.",
265
+ "",
266
+ "51 bottles of beer on the wall, 51 bottles of beer.",
267
+ "Take one down and pass it around, 50 bottles of beer on the wall.",
268
+ "",
269
+ "50 bottles of beer on the wall, 50 bottles of beer.",
270
+ "Take one down and pass it around, 49 bottles of beer on the wall.",
271
+ "",
272
+ "49 bottles of beer on the wall, 49 bottles of beer.",
273
+ "Take one down and pass it around, 48 bottles of beer on the wall.",
274
+ "",
275
+ "48 bottles of beer on the wall, 48 bottles of beer.",
276
+ "Take one down and pass it around, 47 bottles of beer on the wall.",
277
+ "",
278
+ "47 bottles of beer on the wall, 47 bottles of beer.",
279
+ "Take one down and pass it around, 46 bottles of beer on the wall.",
280
+ "",
281
+ "46 bottles of beer on the wall, 46 bottles of beer.",
282
+ "Take one down and pass it around, 45 bottles of beer on the wall.",
283
+ "",
284
+ "45 bottles of beer on the wall, 45 bottles of beer.",
285
+ "Take one down and pass it around, 44 bottles of beer on the wall.",
286
+ "",
287
+ "44 bottles of beer on the wall, 44 bottles of beer.",
288
+ "Take one down and pass it around, 43 bottles of beer on the wall.",
289
+ "",
290
+ "43 bottles of beer on the wall, 43 bottles of beer.",
291
+ "Take one down and pass it around, 42 bottles of beer on the wall.",
292
+ "",
293
+ "42 bottles of beer on the wall, 42 bottles of beer.",
294
+ "Take one down and pass it around, 41 bottles of beer on the wall.",
295
+ "",
296
+ "41 bottles of beer on the wall, 41 bottles of beer.",
297
+ "Take one down and pass it around, 40 bottles of beer on the wall.",
298
+ "",
299
+ "40 bottles of beer on the wall, 40 bottles of beer.",
300
+ "Take one down and pass it around, 39 bottles of beer on the wall.",
301
+ "",
302
+ "39 bottles of beer on the wall, 39 bottles of beer.",
303
+ "Take one down and pass it around, 38 bottles of beer on the wall.",
304
+ "",
305
+ "38 bottles of beer on the wall, 38 bottles of beer.",
306
+ "Take one down and pass it around, 37 bottles of beer on the wall.",
307
+ "",
308
+ "37 bottles of beer on the wall, 37 bottles of beer.",
309
+ "Take one down and pass it around, 36 bottles of beer on the wall.",
310
+ "",
311
+ "36 bottles of beer on the wall, 36 bottles of beer.",
312
+ "Take one down and pass it around, 35 bottles of beer on the wall.",
313
+ "",
314
+ "35 bottles of beer on the wall, 35 bottles of beer.",
315
+ "Take one down and pass it around, 34 bottles of beer on the wall.",
316
+ "",
317
+ "34 bottles of beer on the wall, 34 bottles of beer.",
318
+ "Take one down and pass it around, 33 bottles of beer on the wall.",
319
+ "",
320
+ "33 bottles of beer on the wall, 33 bottles of beer.",
321
+ "Take one down and pass it around, 32 bottles of beer on the wall.",
322
+ "",
323
+ "32 bottles of beer on the wall, 32 bottles of beer.",
324
+ "Take one down and pass it around, 31 bottles of beer on the wall.",
325
+ "",
326
+ "31 bottles of beer on the wall, 31 bottles of beer.",
327
+ "Take one down and pass it around, 30 bottles of beer on the wall.",
328
+ "",
329
+ "30 bottles of beer on the wall, 30 bottles of beer.",
330
+ "Take one down and pass it around, 29 bottles of beer on the wall.",
331
+ "",
332
+ "29 bottles of beer on the wall, 29 bottles of beer.",
333
+ "Take one down and pass it around, 28 bottles of beer on the wall.",
334
+ "",
335
+ "28 bottles of beer on the wall, 28 bottles of beer.",
336
+ "Take one down and pass it around, 27 bottles of beer on the wall.",
337
+ "",
338
+ "27 bottles of beer on the wall, 27 bottles of beer.",
339
+ "Take one down and pass it around, 26 bottles of beer on the wall.",
340
+ "",
341
+ "26 bottles of beer on the wall, 26 bottles of beer.",
342
+ "Take one down and pass it around, 25 bottles of beer on the wall.",
343
+ "",
344
+ "25 bottles of beer on the wall, 25 bottles of beer.",
345
+ "Take one down and pass it around, 24 bottles of beer on the wall.",
346
+ "",
347
+ "24 bottles of beer on the wall, 24 bottles of beer.",
348
+ "Take one down and pass it around, 23 bottles of beer on the wall.",
349
+ "",
350
+ "23 bottles of beer on the wall, 23 bottles of beer.",
351
+ "Take one down and pass it around, 22 bottles of beer on the wall.",
352
+ "",
353
+ "22 bottles of beer on the wall, 22 bottles of beer.",
354
+ "Take one down and pass it around, 21 bottles of beer on the wall.",
355
+ "",
356
+ "21 bottles of beer on the wall, 21 bottles of beer.",
357
+ "Take one down and pass it around, 20 bottles of beer on the wall.",
358
+ "",
359
+ "20 bottles of beer on the wall, 20 bottles of beer.",
360
+ "Take one down and pass it around, 19 bottles of beer on the wall.",
361
+ "",
362
+ "19 bottles of beer on the wall, 19 bottles of beer.",
363
+ "Take one down and pass it around, 18 bottles of beer on the wall.",
364
+ "",
365
+ "18 bottles of beer on the wall, 18 bottles of beer.",
366
+ "Take one down and pass it around, 17 bottles of beer on the wall.",
367
+ "",
368
+ "17 bottles of beer on the wall, 17 bottles of beer.",
369
+ "Take one down and pass it around, 16 bottles of beer on the wall.",
370
+ "",
371
+ "16 bottles of beer on the wall, 16 bottles of beer.",
372
+ "Take one down and pass it around, 15 bottles of beer on the wall.",
373
+ "",
374
+ "15 bottles of beer on the wall, 15 bottles of beer.",
375
+ "Take one down and pass it around, 14 bottles of beer on the wall.",
376
+ "",
377
+ "14 bottles of beer on the wall, 14 bottles of beer.",
378
+ "Take one down and pass it around, 13 bottles of beer on the wall.",
379
+ "",
380
+ "13 bottles of beer on the wall, 13 bottles of beer.",
381
+ "Take one down and pass it around, 12 bottles of beer on the wall.",
382
+ "",
383
+ "12 bottles of beer on the wall, 12 bottles of beer.",
384
+ "Take one down and pass it around, 11 bottles of beer on the wall.",
385
+ "",
386
+ "11 bottles of beer on the wall, 11 bottles of beer.",
387
+ "Take one down and pass it around, 10 bottles of beer on the wall.",
388
+ "",
389
+ "10 bottles of beer on the wall, 10 bottles of beer.",
390
+ "Take one down and pass it around, 9 bottles of beer on the wall.",
391
+ "",
392
+ "9 bottles of beer on the wall, 9 bottles of beer.",
393
+ "Take one down and pass it around, 8 bottles of beer on the wall.",
394
+ "",
395
+ "8 bottles of beer on the wall, 8 bottles of beer.",
396
+ "Take one down and pass it around, 7 bottles of beer on the wall.",
397
+ "",
398
+ "7 bottles of beer on the wall, 7 bottles of beer.",
399
+ "Take one down and pass it around, 6 bottles of beer on the wall.",
400
+ "",
401
+ "6 bottles of beer on the wall, 6 bottles of beer.",
402
+ "Take one down and pass it around, 5 bottles of beer on the wall.",
403
+ "",
404
+ "5 bottles of beer on the wall, 5 bottles of beer.",
405
+ "Take one down and pass it around, 4 bottles of beer on the wall.",
406
+ "",
407
+ "4 bottles of beer on the wall, 4 bottles of beer.",
408
+ "Take one down and pass it around, 3 bottles of beer on the wall.",
409
+ "",
410
+ "3 bottles of beer on the wall, 3 bottles of beer.",
411
+ "Take one down and pass it around, 2 bottles of beer on the wall.",
412
+ "",
413
+ "2 bottles of beer on the wall, 2 bottles of beer.",
414
+ "Take one down and pass it around, 1 bottle of beer on the wall.",
415
+ "",
416
+ "1 bottle of beer on the wall, 1 bottle of beer.",
417
+ "Take it down and pass it around, no more bottles of beer on the wall.",
418
+ "",
419
+ "No more bottles of beer on the wall, no more bottles of beer.",
420
+ "Go to the store and buy some more, 99 bottles of beer on the wall."
421
+ ]
71
422
  }
72
423
  ]
73
424
  }