Last active
March 24, 2022 17:20
-
-
Save dearing/d734266aac05ffee436e83e7f45373f3 to your computer and use it in GitHub Desktop.
NumberToEnglish tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package dialog | |
func englishToTwenty(number int) (value string) { | |
switch number { | |
case 0: | |
value = "zero" | |
case 1: | |
value = "one" | |
case 2: | |
value = "two" | |
case 3: | |
value = "three" | |
case 4: | |
value = "four" | |
case 5: | |
value = "five" | |
case 6: | |
value = "six" | |
case 7: | |
value = "seven" | |
case 8: | |
value = "eight" | |
case 9: | |
value = "nine" | |
case 10: | |
value = "ten" | |
case 11: | |
value = "eleven" | |
case 12: | |
value = "twelve" | |
case 13: | |
value = "thirteen" | |
case 14: | |
value = "fourteen" | |
case 15: | |
value = "fifteen" | |
case 16: | |
value = "sixteen" | |
case 17: | |
value = "seventeen" | |
case 18: | |
value = "eighteen" | |
case 19: | |
value = "nineteen" | |
} | |
return value | |
} | |
// return the english tens of a number | |
func tens(number int) (value string) { | |
switch number { | |
case 2: | |
value = "twenty" | |
case 3: | |
value = "thirty" | |
case 4: | |
value = "forty" | |
case 5: | |
value = "fifty" | |
case 6: | |
value = "sixty" | |
case 7: | |
value = "seventy" | |
case 8: | |
value = "eighty" | |
case 9: | |
value = "ninety" | |
} | |
return value | |
} | |
// recursive return the english version of a number | |
func NumberToEnglish(number int) (value string) { | |
minus := false | |
if number < 0 { | |
minus = true | |
number = -number | |
} | |
if number < 20 { | |
value = englishToTwenty(number) | |
} else if number < 100 { | |
if number%10 == 0 { | |
value = tens(number/10) | |
} else { | |
value = tens(number/10) + "-" + englishToTwenty(number%10) | |
} | |
} else if number < 1_000 { | |
value = englishToTwenty(number/100) + " hundred" | |
if number%100 != 0 { | |
value += " and " + NumberToEnglish(number%100) | |
} | |
} else if number < 1_000_000 { | |
value = NumberToEnglish(number/1_000) + " thousand" | |
if number%1_000 != 0 { | |
value += ", " + NumberToEnglish(number%1_000) | |
} | |
} else if number < 1_000_000_000 { | |
value = NumberToEnglish(number/1_000_000) + " million" | |
if number%1_000_000 != 0 { | |
value += ", " + NumberToEnglish(number%1_000_000) | |
} | |
} else if number < 1_000_000_000_000 { | |
value = NumberToEnglish(number/1_000_000_000) + " billion" | |
if number%1_000_000_000 != 0 { | |
value += ", " + NumberToEnglish(number%1_000_000_000) | |
} | |
} else if number < 1_000_000_000_000_000 { | |
value = NumberToEnglish(number/1_000_000_000_000) + " trillion" | |
if number%1_000_000_000_000 != 0 { | |
value += ", " + NumberToEnglish(number%1_000_000_000_000) | |
} | |
} else { | |
value = NumberToEnglish(number/1_000_000_000_000_000) + " quadrillion" | |
if number%1_000_000_000_000_000 != 0 { | |
value += ", " + NumberToEnglish(number%1_000_000_000_000_000) | |
} | |
} | |
if minus { | |
value = "minus " + value | |
} | |
return value | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package dialog | |
import ( | |
"testing" | |
) | |
var testCases = []struct { | |
number int | |
result string | |
}{ | |
{0, "zero"}, | |
{1, "one"}, | |
{2, "two"}, | |
{3, "three"}, | |
{4, "four"}, | |
{5, "five"}, | |
{6, "six"}, | |
{7, "seven"}, | |
{8, "eight"}, | |
{9, "nine"}, | |
{10, "ten"}, | |
{11, "eleven"}, | |
{12, "twelve"}, | |
{13, "thirteen"}, | |
{14, "fourteen"}, | |
{15, "fifteen"}, | |
{16, "sixteen"}, | |
{17, "seventeen"}, | |
{18, "eighteen"}, | |
{19, "nineteen"}, | |
{20, "twenty"}, | |
{21, "twenty-one"}, | |
{22, "twenty-two"}, | |
{23, "twenty-three"}, | |
{24, "twenty-four"}, | |
{25, "twenty-five"}, | |
{26, "twenty-six"}, | |
{27, "twenty-seven"}, | |
{28, "twenty-eight"}, | |
{29, "twenty-nine"}, | |
{30, "thirty"}, | |
{40, "forty"}, | |
{50, "fifty"}, | |
{60, "sixty"}, | |
{70, "seventy"}, | |
{80, "eighty"}, | |
{90, "ninety"}, | |
{100, "one hundred"}, | |
{101, "one hundred and one"}, | |
{102, "one hundred and two"}, | |
{103, "one hundred and three"}, | |
{104, "one hundred and four"}, | |
{105, "one hundred and five"}, | |
{106, "one hundred and six"}, | |
{107, "one hundred and seven"}, | |
{108, "one hundred and eight"}, | |
{109, "one hundred and nine"}, | |
{110, "one hundred and ten"}, | |
{111, "one hundred and eleven"}, | |
{112, "one hundred and twelve"}, | |
{113, "one hundred and thirteen"}, | |
{114, "one hundred and fourteen"}, | |
{115, "one hundred and fifteen"}, | |
{116, "one hundred and sixteen"}, | |
{117, "one hundred and seventeen"}, | |
{118, "one hundred and eighteen"}, | |
{119, "one hundred and nineteen"}, | |
{120, "one hundred and twenty"}, | |
{121, "one hundred and twenty-one"}, | |
{130, "one hundred and thirty"}, | |
{140, "one hundred and forty"}, | |
{150, "one hundred and fifty"}, | |
{160, "one hundred and sixty"}, | |
{170, "one hundred and seventy"}, | |
{180, "one hundred and eighty"}, | |
{190, "one hundred and ninety"}, | |
{200, "two hundred"}, | |
{300, "three hundred"}, | |
{1_000, "one thousand"}, | |
{1_001, "one thousand, one"}, | |
{1_002, "one thousand, two"}, | |
{1_100, "one thousand, one hundred"}, | |
{1_101, "one thousand, one hundred and one"}, | |
{1_102, "one thousand, one hundred and two"}, | |
{1_200, "one thousand, two hundred"}, | |
{1_201, "one thousand, two hundred and one"}, | |
{2_000, "two thousand"}, | |
{10_000, "ten thousand"}, | |
{100_000, "one hundred thousand"}, | |
{1_000_000, "one million"}, | |
{1_000_000_000, "one billion"}, | |
{1_000_000_000_000, "one trillion"}, | |
{1_000_000_000_000_000, "one quadrillion"}, | |
{-1_000_000_000_000_000, "minus one quadrillion"}, | |
} | |
func TestNumberToEnglish(t *testing.T) { | |
// range over our test cases | |
for _, testCase := range testCases { | |
result := NumberToEnglish(testCase.number) | |
if result != testCase.result { | |
t.Errorf("with NumberToEnglish(%d) => get `%s`, want `%s`", testCase.number, result, testCase.result) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Just test run of github co-pilot helping with the tedium of writing test cases (numeric pattern and english translations) and solving for it (TDD).