Last active
October 9, 2020 17:37
-
-
Save jccatrinck/2f3e2ccb9b7ef9898ce0318ab1a26323 to your computer and use it in GitHub Desktop.
Escale
This file contains 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 main | |
// Error type | |
type Error string | |
func (e Error) Error() string { | |
return string(e) | |
} | |
const ( | |
// ErrorTooHigh when the argument is higher than expected | |
ErrorTooHigh = Error("Higher than expected") | |
separator = " e " | |
) | |
var ( | |
units = []string{ | |
"zero", | |
"um", | |
"dois", | |
"três", | |
"quatro", | |
"cinco", | |
"seis", | |
"sete", | |
"oito", | |
"nove", | |
} | |
specials = []string{ | |
"onze", | |
"doze", | |
"treze", | |
"quatorze", | |
"quinze", | |
"dezesseis", | |
"dezessete", | |
"dezoito", | |
"dezenove", | |
} | |
tens = []string{ | |
"dez", | |
"vinte", | |
"trinta", | |
"quarenta", | |
"cinquenta", | |
"sessenta", | |
"setenta", | |
"oitenta", | |
"noventa", | |
} | |
) | |
// NumberName return the name of the number | |
func NumberName(num int) (name string, err error) { | |
d := int(num / 10) | |
u := num % 10 | |
if num >= 0 && num < 10 { | |
name = units[u] | |
} else if num > 10 && num < 20 { | |
name = specials[u-1] | |
} else if num >= 10 && num < 100 { | |
name = tens[d-1] | |
if u > 0 { | |
name += separator + units[u] | |
} | |
} else { | |
err = ErrorTooHigh | |
} | |
return | |
} | |
func main() { | |
} |
This file contains 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 main | |
import ( | |
"testing" | |
"github.com/stretchr/testify/assert" | |
) | |
func TestNumberNameSimple(t *testing.T) { | |
value, err := NumberName(0) | |
assert.NoError(t, err) | |
assert.Equal(t, "zero", value) | |
value, err = NumberName(9) | |
assert.NoError(t, err) | |
assert.Equal(t, "nove", value) | |
} | |
func TestNumberNameSpecials(t *testing.T) { | |
value, err := NumberName(11) | |
assert.NoError(t, err) | |
assert.Equal(t, "onze", value) | |
value, err = NumberName(19) | |
assert.NoError(t, err) | |
assert.Equal(t, "dezenove", value) | |
} | |
func TestNumberNameTens(t *testing.T) { | |
value, err := NumberName(20) | |
assert.NoError(t, err) | |
assert.Equal(t, "vinte", value) | |
value, err = NumberName(30) | |
assert.NoError(t, err) | |
assert.Equal(t, "trinta", value) | |
} | |
func TestNumberNameComplex(t *testing.T) { | |
value, err := NumberName(21) | |
assert.NoError(t, err) | |
assert.Equal(t, "vinte e um", value) | |
value, err = NumberName(39) | |
assert.NoError(t, err) | |
assert.Equal(t, "trinta e nove", value) | |
value, err = NumberName(99) | |
assert.NoError(t, err) | |
assert.Equal(t, "noventa e nove", value) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment