diff --git a/exercises/alphametics/canonical-data.json b/exercises/alphametics/canonical-data.json index 1b134e5061..d9be250967 100644 --- a/exercises/alphametics/canonical-data.json +++ b/exercises/alphametics/canonical-data.json @@ -114,9 +114,11 @@ } }, { - "description": "puzzle with ten letters and 41 addends", + "description": "puzzle with ten letters and 199 addends", "property": "solve", - "puzzle": "THIS + A + FIRE + THEREFORE + FOR + ALL + HISTORIES + I + TELL + A + TALE + THAT + FALSIFIES + ITS + TITLE + TIS + A + LIE + THE + TALE + OF + THE + LAST + FIRE + HORSES + LATE + AFTER + THE + FIRST + FATHERS + FORESEE + THE + HORRORS + THE + LAST + FREE + TROLL + TERRIFIES + THE + HORSES + OF + FIRE + THE + TROLL + RESTS + AT + THE + HOLE + OF + LOSSES + IT + IS + THERE + THAT + SHE + STORES + ROLES + OF + LEATHERS + AFTER + SHE + SATISFIES + HER + HATE + OFF + THOSE + FEARS + A + TASTE + RISES + AS + SHE + HEARS + THE + LEAST + FAR + HORSE + THOSE + FAST + HORSES + THAT + FIRST + HEAR + THE + TROLL + FLEE + OFF + TO + THE + FOREST + THE + HORSES + THAT + ALERTS + RAISE + THE + STARES + OF + THE + OTHERS + AS + THE + TROLL + ASSAILS + AT + THE + TOTAL + SHIFT + HER + TEETH + TEAR + HOOF + OFF + TORSO + AS + THE + LAST + HORSE + FORFEITS + ITS + LIFE + THE + FIRST + FATHERS + HEAR + OF + THE + HORRORS + THEIR + FEARS + THAT + THE + FIRES + FOR + THEIR + FEASTS + ARREST + AS + THE + FIRST + FATHERS + RESETTLE + THE + LAST + OF + THE + FIRE + HORSES + THE + LAST + TROLL + HARASSES + THE + FOREST + HEART + FREE + AT + LAST + OF + THE + LAST + TROLL + ALL + OFFER + THEIR + FIRE + HEAT + TO + THE + ASSISTERS + FAR + OFF + THE + TROLL + FASTS + ITS + LIFE + SHORTER + AS + STARS + RISE + THE + HORSES + REST + SAFE + AFTER + ALL + SHARE + HOT + FISH + AS + THEIR + AFFILIATES + TAILOR + A + ROOFS + FOR + THEIR + SAFE == FORTRESSES", + "input": { + "puzzle": "THIS + A + FIRE + THEREFORE + FOR + ALL + HISTORIES + I + TELL + A + TALE + THAT + FALSIFIES + ITS + TITLE + TIS + A + LIE + THE + TALE + OF + THE + LAST + FIRE + HORSES + LATE + AFTER + THE + FIRST + FATHERS + FORESEE + THE + HORRORS + THE + LAST + FREE + TROLL + TERRIFIES + THE + HORSES + OF + FIRE + THE + TROLL + RESTS + AT + THE + HOLE + OF + LOSSES + IT + IS + THERE + THAT + SHE + STORES + ROLES + OF + LEATHERS + AFTER + SHE + SATISFIES + HER + HATE + OFF + THOSE + FEARS + A + TASTE + RISES + AS + SHE + HEARS + THE + LEAST + FAR + HORSE + THOSE + FAST + HORSES + THAT + FIRST + HEAR + THE + TROLL + FLEE + OFF + TO + THE + FOREST + THE + HORSES + THAT + ALERTS + RAISE + THE + STARES + OF + THE + OTHERS + AS + THE + TROLL + ASSAILS + AT + THE + TOTAL + SHIFT + HER + TEETH + TEAR + HOOF + OFF + TORSO + AS + THE + LAST + HORSE + FORFEITS + ITS + LIFE + THE + FIRST + FATHERS + HEAR + OF + THE + HORRORS + THEIR + FEARS + THAT + THE + FIRES + FOR + THEIR + FEASTS + ARREST + AS + THE + FIRST + FATHERS + RESETTLE + THE + LAST + OF + THE + FIRE + HORSES + THE + LAST + TROLL + HARASSES + THE + FOREST + HEART + FREE + AT + LAST + OF + THE + LAST + TROLL + ALL + OFFER + THEIR + FIRE + HEAT + TO + THE + ASSISTERS + FAR + OFF + THE + TROLL + FASTS + ITS + LIFE + SHORTER + AS + STARS + RISE + THE + HORSES + REST + SAFE + AFTER + ALL + SHARE + HOT + FISH + AS + THEIR + AFFILIATES + TAILOR + A + ROOFS + FOR + THEIR + SAFE == FORTRESSES" + }, "expected": { "A": 1, "E": 0, diff --git a/exercises/atbash-cipher/canonical-data.json b/exercises/atbash-cipher/canonical-data.json index 56d30946ed..8e7de8c41e 100644 --- a/exercises/atbash-cipher/canonical-data.json +++ b/exercises/atbash-cipher/canonical-data.json @@ -1,6 +1,6 @@ { "exercise": "atbash-cipher", - "version": "1.0.0", + "version": "1.1.0", "comments": [ "The tests are divided into two groups: ", "* Encoding from English to atbash cipher", @@ -14,49 +14,65 @@ { "description": "encode yes", "property": "encode", - "phrase": "yes", + "input": { + "phrase": "yes" + }, "expected": "bvh" }, { "description": "encode no", "property": "encode", - "phrase": "no", + "input": { + "phrase": "no" + }, "expected": "ml" }, { "description": "encode OMG", "property": "encode", - "phrase": "OMG", + "input": { + "phrase": "OMG" + }, "expected": "lnt" }, { "description": "encode spaces", "property": "encode", - "phrase": "O M G", + "input": { + "phrase": "O M G" + }, "expected": "lnt" }, { "description": "encode mindblowingly", "property": "encode", - "phrase": "mindblowingly", + "input": { + "phrase": "mindblowingly" + }, "expected": "nrmwy oldrm tob" }, { "description": "encode numbers", "property": "encode", - "phrase": "Testing,1 2 3, testing.", + "input": { + "phrase": "Testing,1 2 3, testing." + }, "expected": "gvhgr mt123 gvhgr mt" }, { "description": "encode deep thought", "property": "encode", - "phrase": "Truth is fiction.", + "input": { + "phrase": "Truth is fiction." + }, "expected": "gifgs rhurx grlm" }, { "description": "encode all the letters", "property": "encode", - "phrase": "The quick brown fox jumps over the lazy dog.", + "input": { + "phrase": "The quick brown fox jumps over the lazy dog." + }, "expected": "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt" } ] @@ -68,28 +84,36 @@ { "description": "decode exercism", "property": "decode", - "phrase": "vcvix rhn", + "input": { + "phrase": "vcvix rhn" + }, "expected": "exercism" }, { "description": "decode a sentence", "property": "decode", - "phrase": "zmlyh gzxov rhlug vmzhg vkkrm thglm v", + "input": { + "phrase": "zmlyh gzxov rhlug vmzhg vkkrm thglm v" + }, "expected": "anobstacleisoftenasteppingstone" }, { "description": "decode numbers", "property": "decode", - "phrase": "gvhgr mt123 gvhgr mt", + "input": { + "phrase": "gvhgr mt123 gvhgr mt" + }, "expected": "testing123testing" }, { "description": "decode all the letters", "property": "decode", - "phrase": "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt", + "input": { + "phrase": "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt" + }, "expected": "thequickbrownfoxjumpsoverthelazydog" } ] } ] -} +} \ No newline at end of file diff --git a/exercises/bob/canonical-data.json b/exercises/bob/canonical-data.json index e17b7f021c..a00eb705fb 100644 --- a/exercises/bob/canonical-data.json +++ b/exercises/bob/canonical-data.json @@ -1,155 +1,205 @@ { "exercise": "bob", - "version": "1.1.0", + "version": "1.2.0", "cases": [ { "description": "stating something", "property": "response", - "input": "Tom-ay-to, tom-aaaah-to.", + "input": { + "heyBob": "Tom-ay-to, tom-aaaah-to." + }, "expected": "Whatever." }, { "description": "shouting", "property": "response", - "input": "WATCH OUT!", + "input": { + "heyBob": "WATCH OUT!" + }, "expected": "Whoa, chill out!" }, { "description": "shouting gibberish", "property": "response", - "input": "FCECDFCAAB", + "input": { + "heyBob": "FCECDFCAAB" + }, "expected": "Whoa, chill out!" }, { "description": "asking a question", "property": "response", - "input": "Does this cryogenic chamber make me look fat?", + "input": { + "heyBob": "Does this cryogenic chamber make me look fat?" + }, "expected": "Sure." }, { "description": "asking a numeric question", "property": "response", - "input": "You are, what, like 15?", + "input": { + "heyBob": "You are, what, like 15?" + }, "expected": "Sure." }, { "description": "asking gibberish", "property": "response", - "input": "fffbbcbeab?", + "input": { + "heyBob": "fffbbcbeab?" + }, "expected": "Sure." }, { "description": "talking forcefully", "property": "response", - "input": "Let's go make out behind the gym!", + "input": { + "heyBob": "Let's go make out behind the gym!" + }, "expected": "Whatever." }, { "description": "using acronyms in regular speech", "property": "response", - "input": "It's OK if you don't want to go to the DMV.", + "input": { + "heyBob": "It's OK if you don't want to go to the DMV." + }, "expected": "Whatever." }, { "description": "forceful question", "property": "response", - "input": "WHAT THE HELL WERE YOU THINKING?", + "input": { + "heyBob": "WHAT THE HELL WERE YOU THINKING?" + }, "expected": "Calm down, I know what I'm doing!" }, { "description": "shouting numbers", "property": "response", - "input": "1, 2, 3 GO!", + "input": { + "heyBob": "1, 2, 3 GO!" + }, "expected": "Whoa, chill out!" }, { "description": "only numbers", "property": "response", - "input": "1, 2, 3", + "input": { + "heyBob": "1, 2, 3" + }, "expected": "Whatever." }, { "description": "question with only numbers", "property": "response", - "input": "4?", + "input": { + "heyBob": "4?" + }, "expected": "Sure." }, { "description": "shouting with special characters", "property": "response", - "input": "ZOMG THE %^*@#$(*^ ZOMBIES ARE COMING!!11!!1!", + "input": { + "heyBob": "ZOMG THE %^*@#$(*^ ZOMBIES ARE COMING!!11!!1!" + }, "expected": "Whoa, chill out!" }, { "description": "shouting with no exclamation mark", "property": "response", - "input": "I HATE YOU", + "input": { + "heyBob": "I HATE YOU" + }, "expected": "Whoa, chill out!" }, { "description": "statement containing question mark", "property": "response", - "input": "Ending with ? means a question.", + "input": { + "heyBob": "Ending with ? means a question." + }, "expected": "Whatever." }, { "description": "non-letters with question", "property": "response", - "input": ":) ?", + "input": { + "heyBob": ":) ?" + }, "expected": "Sure." }, { "description": "prattling on", "property": "response", - "input": "Wait! Hang on. Are you going to be OK?", + "input": { + "heyBob": "Wait! Hang on. Are you going to be OK?" + }, "expected": "Sure." }, { "description": "silence", "property": "response", - "input": "", + "input": { + "heyBob": "" + }, "expected": "Fine. Be that way!" }, { "description": "prolonged silence", "property": "response", - "input": " ", + "input": { + "heyBob": " " + }, "expected": "Fine. Be that way!" }, { "description": "alternate silence", "property": "response", - "input": "\t\t\t\t\t\t\t\t\t\t", + "input": { + "heyBob": "\t\t\t\t\t\t\t\t\t\t" + }, "expected": "Fine. Be that way!" }, { "description": "multiple line question", "property": "response", - "input": "\nDoes this cryogenic chamber make me look fat?\nno", + "input": { + "heyBob": "\nDoes this cryogenic chamber make me look fat?\nno" + }, "expected": "Whatever." }, { "description": "starting with whitespace", "property": "response", - "input": " hmmmmmmm...", + "input": { + "heyBob": " hmmmmmmm..." + }, "expected": "Whatever." }, { "description": "ending with whitespace", "property": "response", - "input": "Okay if like my spacebar quite a bit? ", + "input": { + "heyBob": "Okay if like my spacebar quite a bit? " + }, "expected": "Sure." }, { "description": "other whitespace", "property": "response", - "input": "\n\r \t", + "input": { + "heyBob": "\n\r \t" + }, "expected": "Fine. Be that way!" }, { "description": "non-question ending with whitespace", "property": "response", - "input": "This is a statement ending with whitespace ", + "input": { + "heyBob": "This is a statement ending with whitespace " + }, "expected": "Whatever." } ] diff --git a/exercises/bracket-push/canonical-data.json b/exercises/bracket-push/canonical-data.json index 184959a7b0..bac6775fae 100644 --- a/exercises/bracket-push/canonical-data.json +++ b/exercises/bracket-push/canonical-data.json @@ -1,90 +1,118 @@ { "exercise": "bracket-push", - "version": "1.1.0", + "version": "1.2.0", "cases": [ { "description": "paired square brackets", "property": "isPaired", - "input": "[]", + "input": { + "value": "[]" + }, "expected": true }, { "description": "empty string", "property": "isPaired", - "input": "", + "input": { + "value": "" + }, "expected": true }, { "description": "unpaired brackets", "property": "isPaired", - "input": "[[", + "input": { + "value": "[[" + }, "expected": false }, { "description": "wrong ordered brackets", "property": "isPaired", - "input": "}{", + "input": { + "value": "}{" + }, "expected": false }, { "description": "wrong closing bracket", "property": "isPaired", - "input": "{]", + "input": { + "value": "{]" + }, "expected": false }, { "description": "paired with whitespace", "property": "isPaired", - "input": "{ }", + "input": { + "value": "{ }" + }, "expected": true }, { "description": "simple nested brackets", "property": "isPaired", - "input": "{[]}", + "input": { + "value": "{[]}" + }, "expected": true }, { "description": "several paired brackets", "property": "isPaired", - "input": "{}[]", + "input": { + "value": "{}[]" + }, "expected": true }, { "description": "paired and nested brackets", "property": "isPaired", - "input": "([{}({}[])])", + "input": { + "value": "([{}({}[])])" + }, "expected": true }, { "description": "unopened closing brackets", "property": "isPaired", - "input": "{[)][]}", + "input": { + "value": "{[)][]}" + }, "expected": false }, { "description": "unpaired and nested brackets", "property": "isPaired", - "input": "([{])", + "input": { + "value": "([{])" + }, "expected": false }, { "description": "paired and wrong nested brackets", "property": "isPaired", - "input": "[({]})", + "input": { + "value": "[({]})" + }, "expected": false }, { "description": "math expression", "property": "isPaired", - "input": "(((185 + 223.85) * 15) - 543)/2", + "input": { + "value": "(((185 + 223.85) * 15) - 543)/2" + }, "expected": true }, { "description": "complex latex expression", "property": "isPaired", - "input": "\\left(\\begin{array}{cc} \\frac{1}{3} & x\\\\ \\mathrm{e}^{x} &... x^2 \\end{array}\\right)", + "input": { + "value": "\\left(\\begin{array}{cc} \\frac{1}{3} & x\\\\ \\mathrm{e}^{x} &... x^2 \\end{array}\\right)" + }, "expected": true } ] -} +} \ No newline at end of file diff --git a/exercises/change/canonical-data.json b/exercises/change/canonical-data.json index 575fb58874..d477ad2422 100644 --- a/exercises/change/canonical-data.json +++ b/exercises/change/canonical-data.json @@ -1,6 +1,6 @@ { "exercise": "change", - "version": "1.1.0", + "version": "1.2.0", "comments": [ "Given an infinite supply of coins with different values, ", "find the smallest number of coins needed to make a desired ", @@ -10,36 +10,46 @@ { "description": "single coin change", "property": "findFewestCoins", - "coins": [1, 5, 10, 25, 100], - "target": 25, + "input": { + "coins": [1, 5, 10, 25, 100], + "target": 25 + }, "expected": [25] }, { "description": "multiple coin change", "property": "findFewestCoins", - "coins": [1, 5, 10, 25, 100], - "target": 15, + "input": { + "coins": [1, 5, 10, 25, 100], + "target": 15 + }, "expected": [5, 10] }, { "description": "change with Lilliputian Coins", "property": "findFewestCoins", - "coins": [1, 4, 15, 20, 50], - "target": 23, + "input": { + "coins": [1, 4, 15, 20, 50], + "target": 23 + }, "expected": [4, 4, 15] }, { "description": "change with Lower Elbonia Coins", "property": "findFewestCoins", - "coins": [1, 5, 10, 21, 25], - "target": 63, + "input": { + "coins": [1, 5, 10, 21, 25], + "target": 63 + }, "expected": [21, 21, 21] }, { "description": "large target values", "property": "findFewestCoins", - "coins": [1, 2, 5, 10, 20, 50, 100], - "target": 999, + "input": { + "coins": [1, 2, 5, 10, 20, 50, 100], + "target": 999 + }, "expected": [ 2, 2, 5, 20, 20 , 50, 100, 100, 100, 100 , 100, 100, 100, 100, 100 ] @@ -47,44 +57,56 @@ { "description": "possible change without unit coins available", "property": "findFewestCoins", - "coins": [2, 5, 10, 20, 50], - "target": 21, + "input": { + "coins": [2, 5, 10, 20, 50], + "target": 21 + }, "expected": [2, 2, 2, 5, 10] }, { "description": "another possible change without unit coins available", "property": "findFewestCoins", - "coins": [4, 5], - "target": 27, + "input": { + "coins": [4, 5], + "target": 27 + }, "expected": [4, 4, 4, 5, 5, 5] }, { "description": "no coins make 0 change", "property": "findFewestCoins", - "coins": [1, 5, 10, 21, 25], - "target": 0, + "input": { + "coins": [1, 5, 10, 21, 25], + "target": 0 + }, "expected": [] }, { "description": "error testing for change smaller than the smallest of coins", "property": "findFewestCoins", - "coins": [5, 10], - "target": 3, + "input": { + "coins": [5, 10], + "target": 3 + }, "expected": -1 }, { "description": "error if no combination can add up to target", "property": "findFewestCoins", - "coins": [5, 10], - "target": 94, + "input": { + "coins": [5, 10], + "target": 94 + }, "expected": -1 }, { "description": "cannot find negative change values", "property": "findFewestCoins", - "coins": [1, 2, 5], - "target": -5, + "input": { + "coins": [1, 2, 5], + "target": -5 + }, "expected": -1 } ] -} +} \ No newline at end of file diff --git a/exercises/collatz-conjecture/canonical-data.json b/exercises/collatz-conjecture/canonical-data.json index 4caff7943d..da40344501 100644 --- a/exercises/collatz-conjecture/canonical-data.json +++ b/exercises/collatz-conjecture/canonical-data.json @@ -1,42 +1,54 @@ { "exercise": "collatz-conjecture", - "version": "1.1.1", + "version": "1.2.0", "cases": [ { "description": "zero steps for one", "property": "steps", - "number": 1, + "input": { + "number": 1 + }, "expected": 0 }, { "description": "divide if even", "property": "steps", - "number": 16, + "input": { + "number": 16 + }, "expected": 4 }, { "description": "even and odd steps", "property": "steps", - "number": 12, + "input": { + "number": 12 + }, "expected": 9 }, { "description": "Large number of even and odd steps", "property": "steps", - "number": 1000000, + "input": { + "number": 1000000 + }, "expected": 152 }, { "description": "zero is an error", "property": "steps", - "number": 0, + "input": { + "number": 0 + }, "expected": { "error": "Only positive numbers are allowed" } }, { "description": "negative value is an error", "property": "steps", - "number": -15, + "input": { + "number": -15 + }, "expected": { "error": "Only positive numbers are allowed" } } ] -} +} \ No newline at end of file diff --git a/exercises/connect/canonical-data.json b/exercises/connect/canonical-data.json index 9b341db422..61d0beccb4 100644 --- a/exercises/connect/canonical-data.json +++ b/exercises/connect/canonical-data.json @@ -1,121 +1,141 @@ { "exercise": "connect", - "version": "1.0.0", + "version": "1.1.0", "cases": [ { "description": "an empty board has no winner", "property": "winner", - "board": [ - ". . . . .", - " . . . . .", - " . . . . .", - " . . . . .", - " . . . . ." - ], + "input": { + "board": [ + ". . . . .", + " . . . . .", + " . . . . .", + " . . . . .", + " . . . . ." + ] + }, "expected": "" }, { "description": "X can win on a 1x1 board", "property": "winner", - "board": [ - "X" - ], + "input": { + "board": [ + "X" + ] + }, "expected": "X" }, { "description": "O can win on a 1x1 board", "property": "winner", - "board": [ - "O" - ], + "input": { + "board": [ + "O" + ] + }, "expected": "O" }, { "description": "only edges does not make a winner", "property": "winner", - "board": [ - "O O O X", - " X . . X", - " X . . X", - " X O O O" - ], + "input": { + "board": [ + "O O O X", + " X . . X", + " X . . X", + " X O O O" + ] + }, "expected": "" }, { "description": "illegal diagonal does not make a winner", "property": "winner", - "board": [ - "X O . .", - " O X X X", - " O X O .", - " . O X .", - " X X O O" - ], + "input": { + "board": [ + "X O . .", + " O X X X", + " O X O .", + " . O X .", + " X X O O" + ] + }, "expected": "" }, { "description": "nobody wins crossing adjacent angles", "property": "winner", - "board": [ - "X . . .", - " . X O .", - " O . X O", - " . O . X", - " . . O ." - ], + "input": { + "board": [ + "X . . .", + " . X O .", + " O . X O", + " . O . X", + " . . O ." + ] + }, "expected": "" }, { "description": "X wins crossing from left to right", "property": "winner", - "board": [ - ". O . .", - " O X X X", - " O X O .", - " X X O X", - " . O X ." - ], + "input": { + "board": [ + ". O . .", + " O X X X", + " O X O .", + " X X O X", + " . O X ." + ] + }, "expected": "X" }, { "description": "O wins crossing from top to bottom", "property": "winner", - "board": [ - ". O . .", - " O X X X", - " O O O .", - " X X O X", - " . O X ." - ], + "input": { + "board": [ + ". O . .", + " O X X X", + " O O O .", + " X X O X", + " . O X ." + ] + }, "expected": "O" }, { "description": "X wins using a convoluted path", "property": "winner", - "board": [ - ". X X . .", - " X . X . X", - " . X . X .", - " . X X . .", - " O O O O O" - ], + "input": { + "board": [ + ". X X . .", + " X . X . X", + " . X . X .", + " . X X . .", + " O O O O O" + ] + }, "expected": "X" }, { "description": "X wins using a spiral path", "property": "winner", - "board": [ - "O X X X X X X X X", - " O X O O O O O O O", - " O X O X X X X X O", - " O X O X O O O X O", - " O X O X X X O X O", - " O X O O O X O X O", - " O X X X X X O X O", - " O O O O O O O X O", - " X X X X X X X X O" - ], + "input": { + "board": [ + "O X X X X X X X X", + " O X O O O O O O O", + " O X O X X X X X O", + " O X O X O O O X O", + " O X O X X X O X O", + " O X O O O X O X O", + " O X X X X X O X O", + " O O O O O O O X O", + " X X X X X X X X O" + ] + }, "expected": "X" } ] -} +} \ No newline at end of file diff --git a/exercises/crypto-square/canonical-data.json b/exercises/crypto-square/canonical-data.json index b5e0f2832b..b2814e2e52 100644 --- a/exercises/crypto-square/canonical-data.json +++ b/exercises/crypto-square/canonical-data.json @@ -1,48 +1,62 @@ { "exercise": "crypto-square", - "version": "3.1.0", + "version": "3.2.0", "cases": [ { "description": "empty plaintext results in an empty ciphertext", "property": "ciphertext", - "plaintext": "", + "input": { + "plaintext": "" + }, "expected": "" }, { "description": "Lowercase", "property": "ciphertext", - "plaintext": "A", + "input": { + "plaintext": "A" + }, "expected": "a" }, { "description": "Remove spaces", "property": "ciphertext", - "plaintext": " b ", + "input": { + "plaintext": " b " + }, "expected": "b" }, { "description": "Remove punctuation", "property": "ciphertext", - "plaintext": "@1,%!", + "input": { + "plaintext": "@1,%!" + }, "expected": "1" }, { "description": "9 character plaintext results in 3 chunks of 3 characters", "property": "ciphertext", - "plaintext": "This is fun!", + "input": { + "plaintext": "This is fun!" + }, "expected": "tsf hiu isn" }, { "description": "8 character plaintext results in 3 chunks, the last one with a trailing space", "property": "ciphertext", - "plaintext": "Chill out.", + "input": { + "plaintext": "Chill out." + }, "expected": "clu hlt io " }, { "description": "54 character plaintext results in 7 chunks, the last two with trailing spaces", "property": "ciphertext", - "plaintext": "If man was meant to stay on the ground, god would have given us roots.", + "input": { + "plaintext": "If man was meant to stay on the ground, god would have given us roots." + }, "expected": "imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau " } ] -} +} \ No newline at end of file diff --git a/exercises/diamond/canonical-data.json b/exercises/diamond/canonical-data.json index 1dec4a5dda..12d794cc92 100644 --- a/exercises/diamond/canonical-data.json +++ b/exercises/diamond/canonical-data.json @@ -1,6 +1,6 @@ { "exercise": "diamond", - "version": "1.0.0", + "version": "1.1.0", "comments": [ " The tests contained within this canonical data file are suitable ", " for value-based testing, in which each test case checks that the ", @@ -22,7 +22,9 @@ { "description": "Degenerate case with a single 'A' row", "property": "rows", - "input": "A", + "input": { + "letter": "A" + }, "expected": [ "A" ] @@ -30,7 +32,9 @@ { "description": "Degenerate case with no row containing 3 distinct groups of spaces", "property": "rows", - "input": "B", + "input": { + "letter": "B" + }, "expected": [ " A ", "B B", @@ -40,7 +44,9 @@ { "description": "Smallest non-degenerate case with odd diamond side length", "property": "rows", - "input": "C", + "input": { + "letter": "C" + }, "expected": [ " A ", " B B ", @@ -52,7 +58,9 @@ { "description": "Smallest non-degenerate case with even diamond side length", "property": "rows", - "input": "D", + "input": { + "letter": "D" + }, "expected": [ " A ", " B B ", @@ -66,7 +74,9 @@ { "description": "Largest possible diamond", "property": "rows", - "input": "Z", + "input": { + "letter": "Z" + }, "expected": [ " A ", " B B ", diff --git a/exercises/difference-of-squares/canonical-data.json b/exercises/difference-of-squares/canonical-data.json index 0dd6c8696e..ec7f78e2b6 100644 --- a/exercises/difference-of-squares/canonical-data.json +++ b/exercises/difference-of-squares/canonical-data.json @@ -1,6 +1,6 @@ { "exercise": "difference-of-squares", - "version": "1.1.0", + "version": "1.2.0", "cases": [ { "description": "Square the sum of the numbers up to the given number", @@ -8,19 +8,25 @@ { "description": "square of sum 1", "property": "squareOfSum", - "number": 1, + "input": { + "number": 1 + }, "expected": 1 }, { "description": "square of sum 5", "property": "squareOfSum", - "number": 5, + "input": { + "number": 5 + }, "expected": 225 }, { "description": "square of sum 100", "property": "squareOfSum", - "number": 100, + "input": { + "number": 100 + }, "expected": 25502500 } ] @@ -31,19 +37,25 @@ { "description": "sum of squares 1", "property": "sumOfSquares", - "number": 1, + "input": { + "number": 1 + }, "expected": 1 }, { "description": "sum of squares 5", "property": "sumOfSquares", - "number": 5, + "input": { + "number": 5 + }, "expected": 55 }, { "description": "sum of squares 100", "property": "sumOfSquares", - "number": 100, + "input": { + "number": 100 + }, "expected": 338350 } ] @@ -54,22 +66,28 @@ { "description": "difference of squares 1", "property": "differenceOfSquares", - "number": 1, + "input": { + "number": 1 + }, "expected": 0 }, { "description": "difference of squares 5", "property": "differenceOfSquares", - "number": 5, + "input": { + "number": 5 + }, "expected": 170 }, { "description": "difference of squares 100", "property": "differenceOfSquares", - "number": 100, + "input": { + "number": 100 + }, "expected": 25164150 } ] } ] -} +} \ No newline at end of file diff --git a/exercises/dominoes/canonical-data.json b/exercises/dominoes/canonical-data.json index af1caa1f6e..6943084a68 100644 --- a/exercises/dominoes/canonical-data.json +++ b/exercises/dominoes/canonical-data.json @@ -1,6 +1,6 @@ { "exercise": "dominoes", - "version": "2.0.0", + "version": "2.1.0", "comments": [ "Inputs are given as lists of two-element lists.", "Feel free to convert the input to a sensible type in the specific language", @@ -40,37 +40,49 @@ { "description": "empty input = empty output", "property": "canChain", - "input": [], + "input": { + "dominoes": [] + }, "expected": true }, { "description": "singleton input = singleton output", "property": "canChain", - "input": [[1, 1]], + "input": { + "dominoes": [[1, 1]] + }, "expected": true }, { "description": "singleton that can't be chained", "property": "canChain", - "input": [[1, 2]], + "input": { + "dominoes": [[1, 2]] + }, "expected": false }, { "description": "three elements", "property": "canChain", - "input": [[1, 2], [3, 1], [2, 3]], + "input": { + "dominoes": [[1, 2], [3, 1], [2, 3]] + }, "expected": true }, { "description": "can reverse dominoes", "property": "canChain", - "input": [[1, 2], [1, 3], [2, 3]], + "input": { + "dominoes": [[1, 2], [1, 3], [2, 3]] + }, "expected": true }, { "description": "can't be chained", "property": "canChain", - "input": [[1, 2], [4, 1], [2, 3]], + "input": { + "dominoes": [[1, 2], [4, 1], [2, 3]] + }, "expected": false }, { @@ -83,19 +95,25 @@ "as that is not a sufficient condition." ], "property": "canChain", - "input": [[1, 1], [2, 2]], + "input": { + "dominoes": [[1, 1], [2, 2]] + }, "expected": false }, { "description": "disconnected - double loop", "property": "canChain", - "input": [[1, 2], [2, 1], [3, 4], [4, 3]], + "input": { + "dominoes": [[1, 2], [2, 1], [3, 4], [4, 3]] + }, "expected": false }, { "description": "disconnected - single isolated", "property": "canChain", - "input": [[1, 2], [2, 3], [3, 1], [4, 4]], + "input": { + "dominoes": [[1, 2], [2, 3], [3, 1], [4, 4]] + }, "expected": false }, { @@ -108,19 +126,25 @@ "You need to place the (2, 4) after the (1, 2) rather than the (2, 3)." ], "property": "canChain", - "input": [[1, 2], [2, 3], [3, 1], [2, 4], [2, 4]], + "input": { + "dominoes": [[1, 2], [2, 3], [3, 1], [2, 4], [2, 4]] + }, "expected": true }, { "description": "separate loops", "property": "canChain", - "input": [[1, 2], [2, 3], [3, 1], [1, 1], [2, 2], [3, 3]], + "input": { + "dominoes": [[1, 2], [2, 3], [3, 1], [1, 1], [2, 2], [3, 3]] + }, "expected": true }, { "description": "nine elements", "property": "canChain", - "input": [[1, 2], [5, 3], [3, 1], [1, 2], [2, 4], [1, 6], [2, 3], [3, 4], [5, 6]], + "input": { + "dominoes": [[1, 2], [5, 3], [3, 1], [1, 2], [2, 4], [1, 6], [2, 3], [3, 4], [5, 6]] + }, "expected": true } ] diff --git a/exercises/flatten-array/canonical-data.json b/exercises/flatten-array/canonical-data.json index e126489716..a7a625073d 100644 --- a/exercises/flatten-array/canonical-data.json +++ b/exercises/flatten-array/canonical-data.json @@ -1,41 +1,53 @@ { "exercise": "flatten-array", - "version": "1.1.0", + "version": "1.2.0", "cases": [ { "description": "no nesting", "property": "flatten", - "input": [0, 1, 2], + "input": { + "array": [0, 1, 2] + }, "expected": [0, 1, 2] }, { "description": "flattens array with just integers present", "property": "flatten", - "input": [1, [2, 3, 4, 5, 6, 7], 8], + "input": { + "array": [1, [2, 3, 4, 5, 6, 7], 8] + }, "expected": [1, 2, 3, 4, 5, 6, 7, 8] }, { "description": "5 level nesting", "property": "flatten", - "input": [0, 2, [[2, 3], 8, 100, 4, [[[50]]]], -2], + "input": { + "array": [0, 2, [[2, 3], 8, 100, 4, [[[50]]]], -2] + }, "expected": [0, 2, 2, 3, 8, 100, 4, 50, -2] }, { "description": "6 level nesting", "property": "flatten", - "input": [1, [2, [[3]], [4, [[5]]], 6, 7], 8], + "input": { + "array": [1, [2, [[3]], [4, [[5]]], 6, 7], 8] + }, "expected": [1, 2, 3, 4, 5, 6, 7, 8] }, { "description": "6 level nest list with null values", "property": "flatten", - "input": [0, 2, [[2, 3], 8, [[100]], null, [[null]]], -2], + "input": { + "array": [0, 2, [[2, 3], 8, [[100]], null, [[null]]], -2] + }, "expected": [0, 2, 2, 3, 8, 100, -2] }, { "description": "all values in nested list are null", "property": "flatten", - "input": [null, [[[null]]], null, null, [[null, null], null], null], + "input": { + "array": [null, [[[null]]], null, null, [[null, null], null], null] + }, "expected": [] } ] diff --git a/exercises/isbn-verifier/canonical-data.json b/exercises/isbn-verifier/canonical-data.json index 47d00213ba..fbb432c797 100644 --- a/exercises/isbn-verifier/canonical-data.json +++ b/exercises/isbn-verifier/canonical-data.json @@ -1,6 +1,6 @@ { "exercise": "isbn-verifier", - "version": "2.0.0", + "version": "2.2.0", "comments": [ "An expected value of true indicates a valid ISBN-10, ", "whereas false means the ISBN-10 is invalid." @@ -9,79 +9,113 @@ { "description": "valid isbn number", "property": "isValid", - "input": "3-598-21508-8", + "input": { + "isbn": "3-598-21508-8" + }, "expected": true }, { "description": "invalid isbn check digit", "property": "isValid", - "input": "3-598-21508-9", + "input": { + "isbn": "3-598-21508-9" + }, "expected": false }, { "description": "valid isbn number with a check digit of 10", "property": "isValid", - "input": "3-598-21507-X", + "input": { + "isbn": "3-598-21507-X" + }, "expected": true }, { "description": "check digit is a character other than X", "property": "isValid", - "input": "3-598-21507-A", + "input": { + "isbn": "3-598-21507-A" + }, "expected": false }, { "description": "invalid character in isbn", "property": "isValid", - "input": "3-598-2K507-0", + "input": { + "isbn": "3-598-2K507-0" + }, "expected": false }, { "description": "X is only valid as a check digit", "property": "isValid", - "input": "3-598-2X507-9", + "input": { + "isbn": "3-598-2X507-9" + }, "expected": false }, { "description": "valid isbn without separating dashes", "property": "isValid", - "input": "3598215088", + "input": { + "isbn": "3598215088" + }, "expected": true }, { "description": "isbn without separating dashes and X as check digit", "property": "isValid", - "input": "359821507X", + "input": { + "isbn": "359821507X" + }, "expected": true }, { "description": "isbn without check digit and dashes", "property": "isValid", - "input": "359821507", + "input": { + "isbn": "359821507" + }, "expected": false }, { "description": "too long isbn and no dashes", "property": "isValid", - "input": "3598215078X", + "input": { + "isbn": "3598215078X" + }, "expected": false }, { "description": "isbn without check digit", "property": "isValid", - "input": "3-598-21507", + "input": { + "isbn": "3-598-21507" + }, "expected": false }, { "description": "too long isbn", "property": "isValid", - "input": "3-598-21507-XX", + "input": { + "isbn": "3-598-21507-XX" + }, "expected": false }, { "description": "check digit of X should not be used for 0", "property": "isValid", - "input": "3-598-21515-X", + "input": { + "isbn": "3-598-21515-X" + }, + "expected": false + }, + { + "description": "empty isbn", + "property": "isValid", + "input": { + "isbn": "" + }, "expected": false } ] diff --git a/exercises/luhn/canonical-data.json b/exercises/luhn/canonical-data.json index 77a66679d9..62196cf4d9 100644 --- a/exercises/luhn/canonical-data.json +++ b/exercises/luhn/canonical-data.json @@ -1,83 +1,109 @@ { "exercise": "luhn", - "version": "1.0.0", + "version": "1.1.0", "cases": [ { "description": "single digit strings can not be valid", "property": "valid", - "input": "1", + "input": { + "value": "1" + }, "expected": false }, { - "description": "A single zero is invalid", + "description": "a single zero is invalid", "property": "valid", - "input": "0", + "input": { + "value": "0" + }, "expected": false }, { "description": "a simple valid SIN that remains valid if reversed", "property": "valid", - "input": "059", + "input": { + "value": "059" + }, "expected": true }, { "description": "a simple valid SIN that becomes invalid if reversed", "property": "valid", - "input": "59", + "input": { + "value": "59" + }, "expected": true }, { "description": "a valid Canadian SIN", "property": "valid", - "input": "055 444 285", + "input": { + "value": "055 444 285" + }, "expected": true }, { "description": "invalid Canadian SIN", "property": "valid", - "input": "055 444 286", + "input": { + "value": "055 444 286" + }, "expected": false }, { "description": "invalid credit card", "property": "valid", - "input": "8273 1232 7352 0569", + "input": { + "value": "8273 1232 7352 0569" + }, "expected": false }, { "description": "valid strings with a non-digit included become invalid", "property": "valid", - "input": "055a 444 285", + "input": { + "value": "055a 444 285" + }, "expected": false }, { "description": "valid strings with punctuation included become invalid", "property": "valid", - "input": "055-444-285", + "input": { + "value": "055-444-285" + }, "expected": false }, { "description": "valid strings with symbols included become invalid", "property": "valid", - "input": "055£ 444$ 285", + "input": { + "value": "055£ 444$ 285" + }, "expected": false }, { "description": "single zero with space is invalid", "property": "valid", - "input": " 0", + "input": { + "value": " 0" + }, "expected": false }, { "description": "more than a single zero is valid", "property": "valid", - "input": "0000 0", + "input": { + "value": "0000 0" + }, "expected": true }, { "description": "input digit 9 is correctly converted to output digit 9", "property": "valid", - "input": "091", + "input": { + "value": "091" + }, "expected": true } ] diff --git a/exercises/meetup/canonical-data.json b/exercises/meetup/canonical-data.json index 49cdfe66a5..5e31a774cf 100644 --- a/exercises/meetup/canonical-data.json +++ b/exercises/meetup/canonical-data.json @@ -1,861 +1,1051 @@ { "exercise": "meetup", - "version": "1.0.0", + "version": "1.1.0", "cases": [ { "description": "monteenth of May 2013", "property": "meetup", - "year": 2013, - "month": 5, - "week": "teenth", - "dayofweek": "Monday", - "dayofmonth": 13 + "input": { + "year": 2013, + "month": 5, + "week": "teenth", + "dayofweek": "Monday" + }, + "expected": "2013-05-13" }, { "description": "monteenth of August 2013", "property": "meetup", - "year": 2013, - "month": 8, - "week": "teenth", - "dayofweek": "Monday", - "dayofmonth": 19 + "input": { + "year": 2013, + "month": 8, + "week": "teenth", + "dayofweek": "Monday" + }, + "expected": "2013-08-19" }, { "description": "monteenth of September 2013", "property": "meetup", - "year": 2013, - "month": 9, - "week": "teenth", - "dayofweek": "Monday", - "dayofmonth": 16 + "input": { + "year": 2013, + "month": 9, + "week": "teenth", + "dayofweek": "Monday" + }, + "expected": "2013-09-16" }, { "description": "tuesteenth of March 2013", "property": "meetup", - "year": 2013, - "month": 3, - "week": "teenth", - "dayofweek": "Tuesday", - "dayofmonth": 19 + "input": { + "year": 2013, + "month": 3, + "week": "teenth", + "dayofweek": "Tuesday" + }, + "expected": "2013-03-19" }, { "description": "tuesteenth of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "teenth", - "dayofweek": "Tuesday", - "dayofmonth": 16 + "input": { + "year": 2013, + "month": 4, + "week": "teenth", + "dayofweek": "Tuesday" + }, + "expected": "2013-04-16" }, { "description": "tuesteenth of August 2013", "property": "meetup", - "year": 2013, - "month": 8, - "week": "teenth", - "dayofweek": "Tuesday", - "dayofmonth": 13 + "input": { + "year": 2013, + "month": 8, + "week": "teenth", + "dayofweek": "Tuesday" + }, + "expected": "2013-08-13" }, { "description": "wednesteenth of January 2013", "property": "meetup", - "year": 2013, - "month": 1, - "week": "teenth", - "dayofweek": "Wednesday", - "dayofmonth": 16 + "input": { + "year": 2013, + "month": 1, + "week": "teenth", + "dayofweek": "Wednesday" + }, + "expected": "2013-01-16" }, { "description": "wednesteenth of February 2013", "property": "meetup", - "year": 2013, - "month": 2, - "week": "teenth", - "dayofweek": "Wednesday", - "dayofmonth": 13 + "input": { + "year": 2013, + "month": 2, + "week": "teenth", + "dayofweek": "Wednesday" + }, + "expected": "2013-02-13" }, { "description": "wednesteenth of June 2013", "property": "meetup", - "year": 2013, - "month": 6, - "week": "teenth", - "dayofweek": "Wednesday", - "dayofmonth": 19 + "input": { + "year": 2013, + "month": 6, + "week": "teenth", + "dayofweek": "Wednesday" + }, + "expected": "2013-06-19" }, { "description": "thursteenth of May 2013", "property": "meetup", - "year": 2013, - "month": 5, - "week": "teenth", - "dayofweek": "Thursday", - "dayofmonth": 16 + "input": { + "year": 2013, + "month": 5, + "week": "teenth", + "dayofweek": "Thursday" + }, + "expected": "2013-05-16" }, { "description": "thursteenth of June 2013", "property": "meetup", - "year": 2013, - "month": 6, - "week": "teenth", - "dayofweek": "Thursday", - "dayofmonth": 13 + "input": { + "year": 2013, + "month": 6, + "week": "teenth", + "dayofweek": "Thursday" + }, + "expected": "2013-06-13" }, { "description": "thursteenth of September 2013", "property": "meetup", - "year": 2013, - "month": 9, - "week": "teenth", - "dayofweek": "Thursday", - "dayofmonth": 19 + "input": { + "year": 2013, + "month": 9, + "week": "teenth", + "dayofweek": "Thursday" + }, + "expected": "2013-09-19" }, { "description": "friteenth of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "teenth", - "dayofweek": "Friday", - "dayofmonth": 19 + "input": { + "year": 2013, + "month": 4, + "week": "teenth", + "dayofweek": "Friday" + }, + "expected": "2013-04-19" }, { "description": "friteenth of August 2013", "property": "meetup", - "year": 2013, - "month": 8, - "week": "teenth", - "dayofweek": "Friday", - "dayofmonth": 16 + "input": { + "year": 2013, + "month": 8, + "week": "teenth", + "dayofweek": "Friday" + }, + "expected": "2013-08-16" }, { "description": "friteenth of September 2013", "property": "meetup", - "year": 2013, - "month": 9, - "week": "teenth", - "dayofweek": "Friday", - "dayofmonth": 13 + "input": { + "year": 2013, + "month": 9, + "week": "teenth", + "dayofweek": "Friday" + }, + "expected": "2013-09-13" }, { "description": "saturteenth of February 2013", "property": "meetup", - "year": 2013, - "month": 2, - "week": "teenth", - "dayofweek": "Saturday", - "dayofmonth": 16 + "input": { + "year": 2013, + "month": 2, + "week": "teenth", + "dayofweek": "Saturday" + }, + "expected": "2013-02-16" }, { "description": "saturteenth of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "teenth", - "dayofweek": "Saturday", - "dayofmonth": 13 + "input": { + "year": 2013, + "month": 4, + "week": "teenth", + "dayofweek": "Saturday" + }, + "expected": "2013-04-13" }, { "description": "saturteenth of October 2013", "property": "meetup", - "year": 2013, - "month": 10, - "week": "teenth", - "dayofweek": "Saturday", - "dayofmonth": 19 + "input": { + "year": 2013, + "month": 10, + "week": "teenth", + "dayofweek": "Saturday" + }, + "expected": "2013-10-19" }, { "description": "sunteenth of May 2013", "property": "meetup", - "year": 2013, - "month": 5, - "week": "teenth", - "dayofweek": "Sunday", - "dayofmonth": 19 + "input": { + "year": 2013, + "month": 5, + "week": "teenth", + "dayofweek": "Sunday" + }, + "expected": "2013-05-19" }, { "description": "sunteenth of June 2013", "property": "meetup", - "year": 2013, - "month": 6, - "week": "teenth", - "dayofweek": "Sunday", - "dayofmonth": 16 + "input": { + "year": 2013, + "month": 6, + "week": "teenth", + "dayofweek": "Sunday" + }, + "expected": "2013-06-16" }, { "description": "sunteenth of October 2013", "property": "meetup", - "year": 2013, - "month": 10, - "week": "teenth", - "dayofweek": "Sunday", - "dayofmonth": 13 + "input": { + "year": 2013, + "month": 10, + "week": "teenth", + "dayofweek": "Sunday" + }, + "expected": "2013-10-13" }, { "description": "first Monday of March 2013", "property": "meetup", - "year": 2013, - "month": 3, - "week": "first", - "dayofweek": "Monday", - "dayofmonth": 4 + "input": { + "year": 2013, + "month": 3, + "week": "first", + "dayofweek": "Monday" + }, + "expected": "2013-03-04" }, { "description": "first Monday of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "first", - "dayofweek": "Monday", - "dayofmonth": 1 + "input": { + "year": 2013, + "month": 4, + "week": "first", + "dayofweek": "Monday" + }, + "expected": "2013-04-01" }, { "description": "first Tuesday of May 2013", "property": "meetup", - "year": 2013, - "month": 5, - "week": "first", - "dayofweek": "Tuesday", - "dayofmonth": 7 + "input": { + "year": 2013, + "month": 5, + "week": "first", + "dayofweek": "Tuesday" + }, + "expected": "2013-05-07" }, { "description": "first Tuesday of June 2013", "property": "meetup", - "year": 2013, - "month": 6, - "week": "first", - "dayofweek": "Tuesday", - "dayofmonth": 4 + "input": { + "year": 2013, + "month": 6, + "week": "first", + "dayofweek": "Tuesday" + }, + "expected": "2013-06-04" }, { "description": "first Wednesday of July 2013", "property": "meetup", - "year": 2013, - "month": 7, - "week": "first", - "dayofweek": "Wednesday", - "dayofmonth": 3 + "input": { + "year": 2013, + "month": 7, + "week": "first", + "dayofweek": "Wednesday" + }, + "expected": "2013-07-03" }, { "description": "first Wednesday of August 2013", "property": "meetup", - "year": 2013, - "month": 8, - "week": "first", - "dayofweek": "Wednesday", - "dayofmonth": 7 + "input": { + "year": 2013, + "month": 8, + "week": "first", + "dayofweek": "Wednesday" + }, + "expected": "2013-08-07" }, { "description": "first Thursday of September 2013", "property": "meetup", - "year": 2013, - "month": 9, - "week": "first", - "dayofweek": "Thursday", - "dayofmonth": 5 + "input": { + "year": 2013, + "month": 9, + "week": "first", + "dayofweek": "Thursday" + }, + "expected": "2013-09-05" }, { "description": "first Thursday of October 2013", "property": "meetup", - "year": 2013, - "month": 10, - "week": "first", - "dayofweek": "Thursday", - "dayofmonth": 3 + "input": { + "year": 2013, + "month": 10, + "week": "first", + "dayofweek": "Thursday" + }, + "expected": "2013-10-03" }, { "description": "first Friday of November 2013", "property": "meetup", - "year": 2013, - "month": 11, - "week": "first", - "dayofweek": "Friday", - "dayofmonth": 1 + "input": { + "year": 2013, + "month": 11, + "week": "first", + "dayofweek": "Friday" + }, + "expected": "2013-11-01" }, { "description": "first Friday of December 2013", "property": "meetup", - "year": 2013, - "month": 12, - "week": "first", - "dayofweek": "Friday", - "dayofmonth": 6 + "input": { + "year": 2013, + "month": 12, + "week": "first", + "dayofweek": "Friday" + }, + "expected": "2013-12-06" }, { "description": "first Saturday of January 2013", "property": "meetup", - "year": 2013, - "month": 1, - "week": "first", - "dayofweek": "Saturday", - "dayofmonth": 5 + "input": { + "year": 2013, + "month": 1, + "week": "first", + "dayofweek": "Saturday" + }, + "expected": "2013-01-05" }, { "description": "first Saturday of February 2013", "property": "meetup", - "year": 2013, - "month": 2, - "week": "first", - "dayofweek": "Saturday", - "dayofmonth": 2 + "input": { + "year": 2013, + "month": 2, + "week": "first", + "dayofweek": "Saturday" + }, + "expected": "2013-02-02" }, { "description": "first Sunday of March 2013", "property": "meetup", - "year": 2013, - "month": 3, - "week": "first", - "dayofweek": "Sunday", - "dayofmonth": 3 + "input": { + "year": 2013, + "month": 3, + "week": "first", + "dayofweek": "Sunday" + }, + "expected": "2013-03-03" }, { "description": "first Sunday of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "first", - "dayofweek": "Sunday", - "dayofmonth": 7 + "input": { + "year": 2013, + "month": 4, + "week": "first", + "dayofweek": "Sunday" + }, + "expected": "2013-04-07" }, { "description": "second Monday of March 2013", "property": "meetup", - "year": 2013, - "month": 3, - "week": "second", - "dayofweek": "Monday", - "dayofmonth": 11 + "input": { + "year": 2013, + "month": 3, + "week": "second", + "dayofweek": "Monday" + }, + "expected": "2013-03-11" }, { "description": "second Monday of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "second", - "dayofweek": "Monday", - "dayofmonth": 8 + "input": { + "year": 2013, + "month": 4, + "week": "second", + "dayofweek": "Monday" + }, + "expected": "2013-04-08" }, { "description": "second Tuesday of May 2013", "property": "meetup", - "year": 2013, - "month": 5, - "week": "second", - "dayofweek": "Tuesday", - "dayofmonth": 14 + "input": { + "year": 2013, + "month": 5, + "week": "second", + "dayofweek": "Tuesday" + }, + "expected": "2013-05-14" }, { "description": "second Tuesday of June 2013", "property": "meetup", - "year": 2013, - "month": 6, - "week": "second", - "dayofweek": "Tuesday", - "dayofmonth": 11 + "input": { + "year": 2013, + "month": 6, + "week": "second", + "dayofweek": "Tuesday" + }, + "expected": "2013-06-11" }, { "description": "second Wednesday of July 2013", "property": "meetup", - "year": 2013, - "month": 7, - "week": "second", - "dayofweek": "Wednesday", - "dayofmonth": 10 + "input": { + "year": 2013, + "month": 7, + "week": "second", + "dayofweek": "Wednesday" + }, + "expected": "2013-07-10" }, { "description": "second Wednesday of August 2013", "property": "meetup", - "year": 2013, - "month": 8, - "week": "second", - "dayofweek": "Wednesday", - "dayofmonth": 14 + "input": { + "year": 2013, + "month": 8, + "week": "second", + "dayofweek": "Wednesday" + }, + "expected": "2013-08-14" }, { "description": "second Thursday of September 2013", "property": "meetup", - "year": 2013, - "month": 9, - "week": "second", - "dayofweek": "Thursday", - "dayofmonth": 12 + "input": { + "year": 2013, + "month": 9, + "week": "second", + "dayofweek": "Thursday" + }, + "expected": "2013-09-12" }, { "description": "second Thursday of October 2013", "property": "meetup", - "year": 2013, - "month": 10, - "week": "second", - "dayofweek": "Thursday", - "dayofmonth": 10 + "input": { + "year": 2013, + "month": 10, + "week": "second", + "dayofweek": "Thursday" + }, + "expected": "2013-10-10" }, { "description": "second Friday of November 2013", "property": "meetup", - "year": 2013, - "month": 11, - "week": "second", - "dayofweek": "Friday", - "dayofmonth": 8 + "input": { + "year": 2013, + "month": 11, + "week": "second", + "dayofweek": "Friday" + }, + "expected": "2013-11-08" }, { "description": "second Friday of December 2013", "property": "meetup", - "year": 2013, - "month": 12, - "week": "second", - "dayofweek": "Friday", - "dayofmonth": 13 + "input": { + "year": 2013, + "month": 12, + "week": "second", + "dayofweek": "Friday" + }, + "expected": "2013-12-13" }, { "description": "second Saturday of January 2013", "property": "meetup", - "year": 2013, - "month": 1, - "week": "second", - "dayofweek": "Saturday", - "dayofmonth": 12 + "input": { + "year": 2013, + "month": 1, + "week": "second", + "dayofweek": "Saturday" + }, + "expected": "2013-01-12" }, { "description": "second Saturday of February 2013", "property": "meetup", - "year": 2013, - "month": 2, - "week": "second", - "dayofweek": "Saturday", - "dayofmonth": 9 + "input": { + "year": 2013, + "month": 2, + "week": "second", + "dayofweek": "Saturday" + }, + "expected": "2013-02-09" }, { "description": "second Sunday of March 2013", "property": "meetup", - "year": 2013, - "month": 3, - "week": "second", - "dayofweek": "Sunday", - "dayofmonth": 10 + "input": { + "year": 2013, + "month": 3, + "week": "second", + "dayofweek": "Sunday" + }, + "expected": "2013-03-10" }, { "description": "second Sunday of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "second", - "dayofweek": "Sunday", - "dayofmonth": 14 + "input": { + "year": 2013, + "month": 4, + "week": "second", + "dayofweek": "Sunday" + }, + "expected": "2013-04-14" }, { "description": "third Monday of March 2013", "property": "meetup", - "year": 2013, - "month": 3, - "week": "third", - "dayofweek": "Monday", - "dayofmonth": 18 + "input": { + "year": 2013, + "month": 3, + "week": "third", + "dayofweek": "Monday" + }, + "expected": "2013-03-18" }, { "description": "third Monday of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "third", - "dayofweek": "Monday", - "dayofmonth": 15 + "input": { + "year": 2013, + "month": 4, + "week": "third", + "dayofweek": "Monday" + }, + "expected": "2013-04-15" }, { "description": "third Tuesday of May 2013", "property": "meetup", - "year": 2013, - "month": 5, - "week": "third", - "dayofweek": "Tuesday", - "dayofmonth": 21 + "input": { + "year": 2013, + "month": 5, + "week": "third", + "dayofweek": "Tuesday" + }, + "expected": "2013-05-21" }, { "description": "third Tuesday of June 2013", "property": "meetup", - "year": 2013, - "month": 6, - "week": "third", - "dayofweek": "Tuesday", - "dayofmonth": 18 + "input": { + "year": 2013, + "month": 6, + "week": "third", + "dayofweek": "Tuesday" + }, + "expected": "2013-06-18" }, { "description": "third Wednesday of July 2013", "property": "meetup", - "year": 2013, - "month": 7, - "week": "third", - "dayofweek": "Wednesday", - "dayofmonth": 17 + "input": { + "year": 2013, + "month": 7, + "week": "third", + "dayofweek": "Wednesday" + }, + "expected": "2013-07-17" }, { "description": "third Wednesday of August 2013", "property": "meetup", - "year": 2013, - "month": 8, - "week": "third", - "dayofweek": "Wednesday", - "dayofmonth": 21 + "input": { + "year": 2013, + "month": 8, + "week": "third", + "dayofweek": "Wednesday" + }, + "expected": "2013-08-21" }, { "description": "third Thursday of September 2013", "property": "meetup", - "year": 2013, - "month": 9, - "week": "third", - "dayofweek": "Thursday", - "dayofmonth": 19 + "input": { + "year": 2013, + "month": 9, + "week": "third", + "dayofweek": "Thursday" + }, + "expected": "2013-09-19" }, { "description": "third Thursday of October 2013", "property": "meetup", - "year": 2013, - "month": 10, - "week": "third", - "dayofweek": "Thursday", - "dayofmonth": 17 + "input": { + "year": 2013, + "month": 10, + "week": "third", + "dayofweek": "Thursday" + }, + "expected": "2013-10-17" }, { "description": "third Friday of November 2013", "property": "meetup", - "year": 2013, - "month": 11, - "week": "third", - "dayofweek": "Friday", - "dayofmonth": 15 + "input": { + "year": 2013, + "month": 11, + "week": "third", + "dayofweek": "Friday" + }, + "expected": "2013-11-15" }, { "description": "third Friday of December 2013", "property": "meetup", - "year": 2013, - "month": 12, - "week": "third", - "dayofweek": "Friday", - "dayofmonth": 20 + "input": { + "year": 2013, + "month": 12, + "week": "third", + "dayofweek": "Friday" + }, + "expected": "2013-12-20" }, { "description": "third Saturday of January 2013", "property": "meetup", - "year": 2013, - "month": 1, - "week": "third", - "dayofweek": "Saturday", - "dayofmonth": 19 + "input": { + "year": 2013, + "month": 1, + "week": "third", + "dayofweek": "Saturday" + }, + "expected": "2013-01-19" }, { "description": "third Saturday of February 2013", "property": "meetup", - "year": 2013, - "month": 2, - "week": "third", - "dayofweek": "Saturday", - "dayofmonth": 16 + "input": { + "year": 2013, + "month": 2, + "week": "third", + "dayofweek": "Saturday" + }, + "expected": "2013-02-16" }, { "description": "third Sunday of March 2013", "property": "meetup", - "year": 2013, - "month": 3, - "week": "third", - "dayofweek": "Sunday", - "dayofmonth": 17 + "input": { + "year": 2013, + "month": 3, + "week": "third", + "dayofweek": "Sunday" + }, + "expected": "2013-03-17" }, { "description": "third Sunday of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "third", - "dayofweek": "Sunday", - "dayofmonth": 21 + "input": { + "year": 2013, + "month": 4, + "week": "third", + "dayofweek": "Sunday" + }, + "expected": "2013-04-21" }, { "description": "fourth Monday of March 2013", "property": "meetup", - "year": 2013, - "month": 3, - "week": "fourth", - "dayofweek": "Monday", - "dayofmonth": 25 + "input": { + "year": 2013, + "month": 3, + "week": "fourth", + "dayofweek": "Monday" + }, + "expected": "2013-03-25" }, { "description": "fourth Monday of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "fourth", - "dayofweek": "Monday", - "dayofmonth": 22 + "input": { + "year": 2013, + "month": 4, + "week": "fourth", + "dayofweek": "Monday" + }, + "expected": "2013-04-22" }, { "description": "fourth Tuesday of May 2013", "property": "meetup", - "year": 2013, - "month": 5, - "week": "fourth", - "dayofweek": "Tuesday", - "dayofmonth": 28 + "input": { + "year": 2013, + "month": 5, + "week": "fourth", + "dayofweek": "Tuesday" + }, + "expected": "2013-05-28" }, { "description": "fourth Tuesday of June 2013", "property": "meetup", - "year": 2013, - "month": 6, - "week": "fourth", - "dayofweek": "Tuesday", - "dayofmonth": 25 + "input": { + "year": 2013, + "month": 6, + "week": "fourth", + "dayofweek": "Tuesday" + }, + "expected": "2013-06-25" }, { "description": "fourth Wednesday of July 2013", "property": "meetup", - "year": 2013, - "month": 7, - "week": "fourth", - "dayofweek": "Wednesday", - "dayofmonth": 24 + "input": { + "year": 2013, + "month": 7, + "week": "fourth", + "dayofweek": "Wednesday" + }, + "expected": "2013-07-24" }, { "description": "fourth Wednesday of August 2013", "property": "meetup", - "year": 2013, - "month": 8, - "week": "fourth", - "dayofweek": "Wednesday", - "dayofmonth": 28 + "input": { + "year": 2013, + "month": 8, + "week": "fourth", + "dayofweek": "Wednesday" + }, + "expected": "2013-08-28" }, { "description": "fourth Thursday of September 2013", "property": "meetup", - "year": 2013, - "month": 9, - "week": "fourth", - "dayofweek": "Thursday", - "dayofmonth": 26 + "input": { + "year": 2013, + "month": 9, + "week": "fourth", + "dayofweek": "Thursday" + }, + "expected": "2013-09-26" }, { "description": "fourth Thursday of October 2013", "property": "meetup", - "year": 2013, - "month": 10, - "week": "fourth", - "dayofweek": "Thursday", - "dayofmonth": 24 + "input": { + "year": 2013, + "month": 10, + "week": "fourth", + "dayofweek": "Thursday" + }, + "expected": "2013-10-24" }, { "description": "fourth Friday of November 2013", "property": "meetup", - "year": 2013, - "month": 11, - "week": "fourth", - "dayofweek": "Friday", - "dayofmonth": 22 + "input": { + "year": 2013, + "month": 11, + "week": "fourth", + "dayofweek": "Friday" + }, + "expected": "2013-11-22" }, { "description": "fourth Friday of December 2013", "property": "meetup", - "year": 2013, - "month": 12, - "week": "fourth", - "dayofweek": "Friday", - "dayofmonth": 27 + "input": { + "year": 2013, + "month": 12, + "week": "fourth", + "dayofweek": "Friday" + }, + "expected": "2013-12-27" }, { "description": "fourth Saturday of January 2013", "property": "meetup", - "year": 2013, - "month": 1, - "week": "fourth", - "dayofweek": "Saturday", - "dayofmonth": 26 + "input": { + "year": 2013, + "month": 1, + "week": "fourth", + "dayofweek": "Saturday" + }, + "expected": "2013-01-26" }, { "description": "fourth Saturday of February 2013", "property": "meetup", - "year": 2013, - "month": 2, - "week": "fourth", - "dayofweek": "Saturday", - "dayofmonth": 23 + "input": { + "year": 2013, + "month": 2, + "week": "fourth", + "dayofweek": "Saturday" + }, + "expected": "2013-02-23" }, { "description": "fourth Sunday of March 2013", "property": "meetup", - "year": 2013, - "month": 3, - "week": "fourth", - "dayofweek": "Sunday", - "dayofmonth": 24 + "input": { + "year": 2013, + "month": 3, + "week": "fourth", + "dayofweek": "Sunday" + }, + "expected": "2013-03-24" }, { "description": "fourth Sunday of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "fourth", - "dayofweek": "Sunday", - "dayofmonth": 28 + "input": { + "year": 2013, + "month": 4, + "week": "fourth", + "dayofweek": "Sunday" + }, + "expected": "2013-04-28" }, { "description": "last Monday of March 2013", "property": "meetup", - "year": 2013, - "month": 3, - "week": "last", - "dayofweek": "Monday", - "dayofmonth": 25 + "input": { + "year": 2013, + "month": 3, + "week": "last", + "dayofweek": "Monday" + }, + "expected": "2013-03-25" }, { "description": "last Monday of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "last", - "dayofweek": "Monday", - "dayofmonth": 29 + "input": { + "year": 2013, + "month": 4, + "week": "last", + "dayofweek": "Monday" + }, + "expected": "2013-04-29" }, { "description": "last Tuesday of May 2013", "property": "meetup", - "year": 2013, - "month": 5, - "week": "last", - "dayofweek": "Tuesday", - "dayofmonth": 28 + "input": { + "year": 2013, + "month": 5, + "week": "last", + "dayofweek": "Tuesday" + }, + "expected": "2013-05-28" }, { "description": "last Tuesday of June 2013", "property": "meetup", - "year": 2013, - "month": 6, - "week": "last", - "dayofweek": "Tuesday", - "dayofmonth": 25 + "input": { + "year": 2013, + "month": 6, + "week": "last", + "dayofweek": "Tuesday" + }, + "expected": "2013-06-25" }, { "description": "last Wednesday of July 2013", "property": "meetup", - "year": 2013, - "month": 7, - "week": "last", - "dayofweek": "Wednesday", - "dayofmonth": 31 + "input": { + "year": 2013, + "month": 7, + "week": "last", + "dayofweek": "Wednesday" + }, + "expected": "2013-07-31" }, { "description": "last Wednesday of August 2013", "property": "meetup", - "year": 2013, - "month": 8, - "week": "last", - "dayofweek": "Wednesday", - "dayofmonth": 28 + "input": { + "year": 2013, + "month": 8, + "week": "last", + "dayofweek": "Wednesday" + }, + "expected": "2013-08-28" }, { "description": "last Thursday of September 2013", "property": "meetup", - "year": 2013, - "month": 9, - "week": "last", - "dayofweek": "Thursday", - "dayofmonth": 26 + "input": { + "year": 2013, + "month": 9, + "week": "last", + "dayofweek": "Thursday" + }, + "expected": "2013-09-26" }, { "description": "last Thursday of October 2013", "property": "meetup", - "year": 2013, - "month": 10, - "week": "last", - "dayofweek": "Thursday", - "dayofmonth": 31 + "input": { + "year": 2013, + "month": 10, + "week": "last", + "dayofweek": "Thursday" + }, + "expected": "2013-10-31" }, { "description": "last Friday of November 2013", "property": "meetup", - "year": 2013, - "month": 11, - "week": "last", - "dayofweek": "Friday", - "dayofmonth": 29 + "input": { + "year": 2013, + "month": 11, + "week": "last", + "dayofweek": "Friday" + }, + "expected": "2013-11-29" }, { "description": "last Friday of December 2013", "property": "meetup", - "year": 2013, - "month": 12, - "week": "last", - "dayofweek": "Friday", - "dayofmonth": 27 + "input": { + "year": 2013, + "month": 12, + "week": "last", + "dayofweek": "Friday" + }, + "expected": "2013-12-27" }, { "description": "last Saturday of January 2013", "property": "meetup", - "year": 2013, - "month": 1, - "week": "last", - "dayofweek": "Saturday", - "dayofmonth": 26 + "input": { + "year": 2013, + "month": 1, + "week": "last", + "dayofweek": "Saturday" + }, + "expected": "2013-01-26" }, { "description": "last Saturday of February 2013", "property": "meetup", - "year": 2013, - "month": 2, - "week": "last", - "dayofweek": "Saturday", - "dayofmonth": 23 + "input": { + "year": 2013, + "month": 2, + "week": "last", + "dayofweek": "Saturday" + }, + "expected": "2013-02-23" }, { "description": "last Sunday of March 2013", "property": "meetup", - "year": 2013, - "month": 3, - "week": "last", - "dayofweek": "Sunday", - "dayofmonth": 31 + "input": { + "year": 2013, + "month": 3, + "week": "last", + "dayofweek": "Sunday" + }, + "expected": "2013-03-31" }, { "description": "last Sunday of April 2013", "property": "meetup", - "year": 2013, - "month": 4, - "week": "last", - "dayofweek": "Sunday", - "dayofmonth": 28 + "input": { + "year": 2013, + "month": 4, + "week": "last", + "dayofweek": "Sunday" + }, + "expected": "2013-04-28" }, { "description": "last Wednesday of February 2012", "property": "meetup", - "year": 2012, - "month": 2, - "week": "last", - "dayofweek": "Wednesday", - "dayofmonth": 29 + "input": { + "year": 2012, + "month": 2, + "week": "last", + "dayofweek": "Wednesday" + }, + "expected": "2012-02-29" }, { "description": "last Wednesday of December 2014", "property": "meetup", - "year": 2014, - "month": 12, - "week": "last", - "dayofweek": "Wednesday", - "dayofmonth": 31 + "input": { + "year": 2014, + "month": 12, + "week": "last", + "dayofweek": "Wednesday" + }, + "expected": "2014-12-31" }, { "description": "last Sunday of February 2015", "property": "meetup", - "year": 2015, - "month": 2, - "week": "last", - "dayofweek": "Sunday", - "dayofmonth": 22 + "input": { + "year": 2015, + "month": 2, + "week": "last", + "dayofweek": "Sunday" + }, + "expected": "2015-02-22" }, { "description": "first Friday of December 2012", "property": "meetup", - "year": 2012, - "month": 12, - "week": "first", - "dayofweek": "Friday", - "dayofmonth": 7 + "input": { + "year": 2012, + "month": 12, + "week": "first", + "dayofweek": "Friday" + }, + "expected": "2012-12-07" } ] -} +} \ No newline at end of file