Skip to content

Instantly share code, notes, and snippets.

@jccatrinck
Last active October 9, 2020 17:37
Show Gist options
  • Save jccatrinck/2f3e2ccb9b7ef9898ce0318ab1a26323 to your computer and use it in GitHub Desktop.
Save jccatrinck/2f3e2ccb9b7ef9898ce0318ab1a26323 to your computer and use it in GitHub Desktop.
Escale
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() {
}
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