added negative support
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
90bf8beb0c
commit
7823443488
3 changed files with 44 additions and 9 deletions
|
@ -1,2 +1,5 @@
|
||||||
|
v1.0.2, released 2024-08-08
|
||||||
|
* support negative values
|
||||||
|
|
||||||
v1.0.1, released 2024-08-08
|
v1.0.1, released 2024-08-08
|
||||||
* fix encoding to zero
|
* fix encoding to zero
|
||||||
|
|
19
abcex.go
19
abcex.go
|
@ -38,23 +38,42 @@ func Encode(number int64) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
result := ""
|
result := ""
|
||||||
|
negative := false
|
||||||
|
if number < 0 {
|
||||||
|
number = number * (-1)
|
||||||
|
negative = true
|
||||||
|
}
|
||||||
|
|
||||||
for number > 0 {
|
for number > 0 {
|
||||||
result = fmt.Sprintf("%s%s", decToAbcex[int(number%36)], result)
|
result = fmt.Sprintf("%s%s", decToAbcex[int(number%36)], result)
|
||||||
number /= 36
|
number /= 36
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if negative {
|
||||||
|
return "-" + result
|
||||||
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func Decode(str string) int64 {
|
func Decode(str string) int64 {
|
||||||
var result int64
|
var result int64
|
||||||
result = 0
|
result = 0
|
||||||
|
negative := false
|
||||||
|
if string(str[0]) == "-" {
|
||||||
|
negative = true
|
||||||
|
str = str[1:]
|
||||||
|
}
|
||||||
|
|
||||||
str = reverse(str)
|
str = reverse(str)
|
||||||
|
|
||||||
for i, c := range str {
|
for i, c := range str {
|
||||||
result = int64(math.Pow(36, float64(i)))*int64(abcexToDec[string(c)]) + result
|
result = int64(math.Pow(36, float64(i)))*int64(abcexToDec[string(c)]) + result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if negative {
|
||||||
|
return result * (-1)
|
||||||
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,37 @@
|
||||||
package abcex
|
package abcex
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestEncode(t *testing.T) {
|
func TestEncode(t *testing.T) {
|
||||||
fmt.Println(Encode(12345))
|
if Encode(12345) != "9ix" {
|
||||||
// Output: 9ix
|
t.Fatal("Failed encoding")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDecode(t *testing.T) {
|
func TestDecode(t *testing.T) {
|
||||||
fmt.Println(Decode("9ix"))
|
if Decode("9ix") != 12345 {
|
||||||
// Output: 12345
|
t.Fatal("Failed decoding")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestZero(t *testing.T) {
|
func TestZero(t *testing.T) {
|
||||||
fmt.Println(Encode(0))
|
if Encode(0) != "0" {
|
||||||
// Output: 0
|
t.Fatal("Failed zero encoding")
|
||||||
|
}
|
||||||
|
|
||||||
fmt.Println(Decode("0"))
|
if Decode("0") != 0 {
|
||||||
// Output: 0
|
t.Fatal("Failed zero decoding")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNegative(t *testing.T) {
|
||||||
|
if Encode(-20) != "-k" {
|
||||||
|
t.Fatal("Failed negative encoding:", Encode(-20))
|
||||||
|
}
|
||||||
|
|
||||||
|
if Decode("-ab") != -371 {
|
||||||
|
t.Fatal("Failed negative decoding", Decode("-ab"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue