Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion bin/generate-spec
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ included_tests_from_toml = (path) ->
-- functions marked as global so spec_generators can see them
export indent, quote, is_json_null, is_empty, contains

indent = (text, level) -> string.rep(' ', level) .. text
indent = (text, level) ->
error 'Provide a level for `indent`', 2 if not level
string.rep(' ', level) .. text

quote = (str) ->
if str\find "'"
Expand Down
8 changes: 4 additions & 4 deletions exercises/practice/all-your-base/.meta/spec_generator.moon
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
list_of_digits = (digits) -> "{#{table.concat digits, ', '}}"
import int_list from require 'test_helpers'

{
module_imports: {'rebase'},
Expand All @@ -7,13 +7,13 @@ list_of_digits = (digits) -> "{#{table.concat digits, ', '}}"
local lines
if not case.expected.error
lines = {
"result = rebase in_base: #{case.input.inputBase}, out_base: #{case.input.outputBase}, digits: #{list_of_digits case.input.digits}",
"expected = #{list_of_digits case.expected}",
"result = rebase in_base: #{case.input.inputBase}, out_base: #{case.input.outputBase}, digits: #{int_list case.input.digits}",
"expected = #{int_list case.expected}",
"assert.are.same expected, result"
}
else
lines = {
"f = -> rebase in_base: #{case.input.inputBase}, out_base: #{case.input.outputBase}, digits: #{list_of_digits case.input.digits}",
"f = -> rebase in_base: #{case.input.inputBase}, out_base: #{case.input.outputBase}, digits: #{int_list case.input.digits}",
"assert.has.errors f, #{quote case.expected.error}"
}

Expand Down
5 changes: 2 additions & 3 deletions exercises/practice/allergies/.meta/spec_generator.moon
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
str_list = (list) ->
"{#{table.concat [quote word for word in *list], ', '}}"
import word_list from require 'test_helpers'

{
module_name: 'Allergies',
Expand All @@ -15,7 +14,7 @@ str_list = (list) ->
when 'list'
lines = {
"result = Allergies.list #{case.input.score}",
"expected = #{str_list case.expected}",
"expected = #{word_list case.expected}",
"assert.is.same expected, result",
}
table.concat [indent line, level for line in *lines], '\n'
Expand Down
7 changes: 3 additions & 4 deletions exercises/practice/anagram/.meta/spec_generator.moon
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
list_of_words = (list) ->
"{#{table.concat [quote word for word in *list], ', '}}"
import word_list from require 'test_helpers'

{
module_name: 'find_anagrams',
generate_test: (case, level) ->
lines = {
"result = find_anagrams #{quote case.input.subject}, #{list_of_words case.input.candidates}",
"expected = #{list_of_words case.expected}",
"result = find_anagrams #{quote case.input.subject}, #{word_list case.input.candidates}",
"expected = #{word_list case.expected}",
"assert.are.same expected, result"
}
table.concat [indent line, level for line in *lines], '\n'
Expand Down
10 changes: 3 additions & 7 deletions exercises/practice/baffling-birthdays/.meta/spec_generator.moon
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
tablex = require 'pl.tablex'

int_list = (list) -> "{#{table.concat list, ', '}}"

string_list = (list) ->
"{#{table.concat [quote word for word in *list], ', '}}"
import int_list, word_list from require 'test_helpers'

{
module_name: 'BafflingBirthdays',
Expand All @@ -13,7 +9,7 @@ string_list = (list) ->
switch case.property
when 'sharedBirthday'
lines = {
"birthdates = #{string_list case.input.birthdates}",
"birthdates = #{word_list case.input.birthdates}",
"assert.is.#{case.expected} BafflingBirthdays.#{case.property} birthdates",
}
when 'estimatedProbabilityOfSharedBirthday'
Expand Down Expand Up @@ -68,7 +64,7 @@ string_list = (list) ->
tablex = require 'pl.tablex'

--
epsilon = 0.5
epsilon = 1.0
is_close_to = (state, arguments) ->
{a, b} = arguments
math.abs(a - b) <= epsilon
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ describe 'baffling-birthdays', ->
tablex = require 'pl.tablex'

--
epsilon = 0.5
epsilon = 1.0
is_close_to = (state, arguments) ->
{a, b} = arguments
math.abs(a - b) <= epsilon
Expand Down
11 changes: 4 additions & 7 deletions exercises/practice/binary-search-tree/.meta/spec_generator.moon
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
stringx = require 'pl.stringx'
import dump from require 'moon'
import word_list from require 'test_helpers'

bst = (t, level) ->
dumped = dump t
dumped = dumped\gsub('%[(.-)%] =', '%1:')
lines = [indent line, level for line in *(stringx.splitlines dumped)]
table.concat(lines, "\n")\gsub('{%s+}', 'nil')\gsub('^%s+', '')

string_list = (list) ->
"{#{table.concat [quote word for word in *list], ', '}}"


{
module_name: 'BinarySearchTree',

Expand All @@ -19,16 +16,16 @@ string_list = (list) ->
switch case.property
when 'data'
lines = {
"tree = BinarySearchTree #{string_list case.input.treeData}"
"tree = BinarySearchTree #{word_list case.input.treeData}"
"result = tree\\data!"
"expected = #{bst case.expected, level}",
"assert.are.same expected, result"
}
when 'sortedData'
lines = {
"tree = BinarySearchTree #{string_list case.input.treeData}"
"tree = BinarySearchTree #{word_list case.input.treeData}"
"result = tree\\sorted!"
"expected = #{string_list case.expected}",
"expected = #{word_list case.expected}",
"assert.are.same expected, result"
}
table.concat [indent line, level for line in *lines], '\n'
Expand Down
46 changes: 23 additions & 23 deletions exercises/practice/binary-search-tree/binary_search_tree_spec.moon
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ describe 'binary-search-tree', ->
tree = BinarySearchTree {'4'}
result = tree\data!
expected = {
left: nil
right: nil
data: "4"
left: nil
}
assert.are.same expected, result

Expand All @@ -16,75 +16,75 @@ describe 'binary-search-tree', ->
tree = BinarySearchTree {'4', '2'}
result = tree\data!
expected = {
right: nil
data: "4"
left: {
left: nil
right: nil
data: "2"
left: nil
}
right: nil
data: "4"
}
assert.are.same expected, result

pending 'same number at left node', ->
tree = BinarySearchTree {'4', '4'}
result = tree\data!
expected = {
right: nil
data: "4"
left: {
left: nil
right: nil
data: "4"
left: nil
}
right: nil
data: "4"
}
assert.are.same expected, result

pending 'greater number at right node', ->
tree = BinarySearchTree {'4', '5'}
result = tree\data!
expected = {
left: nil
right: {
left: nil
right: nil
data: "5"
left: nil
}
data: "4"
left: nil
}
assert.are.same expected, result

pending 'can create complex tree', ->
tree = BinarySearchTree {'4', '2', '6', '1', '3', '5', '7'}
result = tree\data!
expected = {
right: {
right: {
right: nil
data: "7"
left: nil
}
data: "6"
left: {
left: {
right: nil
data: "5"
left: nil
right: nil
data: "1"
}
}
data: "4"
left: {
right: {
left: nil
right: nil
data: "3"
left: nil
}
data: "2"
}
right: {
left: {
left: nil
right: nil
data: "1"
data: "5"
}
right: {
left: nil
right: nil
data: "7"
}
data: "6"
}
data: "4"
}
assert.are.same expected, result

Expand Down
2 changes: 1 addition & 1 deletion exercises/practice/book-store/.meta/spec_generator.moon
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
int_list = (list) -> "{#{table.concat list, ', '}}"
import int_list from require 'test_helpers'

{
module_name: 'BookStore',
Expand Down
6 changes: 3 additions & 3 deletions exercises/practice/camicia/.meta/spec_generator.moon
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
string_list = (list) -> "{#{table.concat [quote(v) for v in *list], ', '}}"
import word_list from require 'test_helpers'

{
module_name: 'Camicia'

generate_test: (case, level) ->
lines = {
"playerA = #{string_list case.input.playerA}"
"playerB = #{string_list case.input.playerB}"
"playerA = #{word_list case.input.playerA}"
"playerB = #{word_list case.input.playerB}"
"expected = {"
" status: #{quote case.expected.status}"
" cards: #{case.expected.cards}"
Expand Down
2 changes: 1 addition & 1 deletion exercises/practice/custom-set/.meta/spec_generator.moon
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
int_list = (list) -> "{#{table.concat list, ', '}}"
import int_list from require 'test_helpers'

{
module_name: 'CustomSet',
Expand Down
17 changes: 7 additions & 10 deletions exercises/practice/diamond/.meta/spec_generator.moon
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
import string_list from require 'test_helpers'

{
module_name: 'Diamond'

generate_test: (case, level) ->
lines = {}
table.insert lines, "result = Diamond.#{case.property} #{quote case.input.letter}"

rows = [indent quote(row), level + 1 for row in *case.expected]
table.insert rows, 1, '{'
table.insert rows, indent('}', level)

table.insert lines, "expected = #{table.concat rows, '\n'}"
table.insert lines, "assert.are.same expected, result"

lines = {
"result = Diamond.#{case.property} #{quote case.input.letter}"
"expected = #{string_list case.expected, level}"
"assert.are.same expected, result"
}
table.concat [indent line, level for line in *lines], '\n'
}
Loading
Loading