all repos

clerk @ e5cc255

missing tooling for ledger/hledger

clerk/internal/decimal/decimal_test.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
remove decimal dependency, 14 days ago
1
package decimal
2
3
import "testing"
4
5
func TestNewFromString(t *testing.T) {
6
	tests := []struct{ in, want string }{
7
		{"10.00", "10"},
8
		{"150.60", "150.6"},
9
		{".33", "0.33"},
10
		{"1.", "1"},
11
		{"0001.2300", "1.23"},
12
		{"0", "0"},
13
		{"0.00", "0"},
14
		{"-0.00", "0"},
15
		{"-20", "-20"},
16
		{"-.75", "-0.75"},
17
	}
18
	for _, tt := range tests {
19
		got, err := FromString(tt.in)
20
		if err != nil {
21
			t.Fatalf("NewFromString(%q) unexpected error: %v", tt.in, err)
22
		}
23
		if got.String() != tt.want {
24
			t.Fatalf("NewFromString(%q).String() = %q, want %q", tt.in, got.String(), tt.want)
25
		}
26
	}
27
}
28
29
func TestNewFromStringInvalid(t *testing.T) {
30
	tests := []string{
31
		"",
32
		".",
33
		"+",
34
		"-",
35
		"1_000.00",
36
		"1,000.00",
37
		"1..0",
38
		"a1",
39
		"1a",
40
	}
41
	for _, in := range tests {
42
		if _, err := FromString(in); err == nil {
43
			t.Fatalf("NewFromString(%q) expected error", in)
44
		}
45
	}
46
}
47
48
func TestArithmetic(t *testing.T) {
49
	a, _ := FromString("1.20")
50
	b, _ := FromString(".30")
51
52
	if got := a.Add(b).String(); got != "1.5" {
53
		t.Fatalf("a+b = %q, want %q", got, "1.5")
54
	}
55
	if got := a.Sub(b).String(); got != "0.9" {
56
		t.Fatalf("a-b = %q, want %q", got, "0.9")
57
	}
58
	if got := a.Mul(b).String(); got != "0.36" {
59
		t.Fatalf("a*b = %q, want %q", got, "0.36")
60
	}
61
}
62
63
func TestCmpAndNeg(t *testing.T) {
64
	a, _ := FromString("1.0")
65
	b, _ := FromString("1")
66
	c, _ := FromString("1.01")
67
68
	if a.Cmp(b) != 0 {
69
		t.Fatalf("expected %q and %q to be equal", a.String(), b.String())
70
	}
71
	if b.Cmp(c) >= 0 {
72
		t.Fatalf("expected %q to be less than %q", b.String(), c.String())
73
	}
74
	if got := b.Neg().String(); got != "-1" {
75
		t.Fatalf("Neg(1) = %q, want %q", got, "-1")
76
	}
77
	if got := (Decimal{}).Neg().String(); got != "0" {
78
		t.Fatalf("Neg(0) = %q, want %q", got, "0")
79
	}
80
}