File: number_test.go

package info (click to toggle)
golang-github-tdewolff-parse 2.7.15-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 836 kB
  • sloc: makefile: 2
file content (98 lines) | stat: -rw-r--r-- 2,294 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package strconv

import (
	"testing"

	"github.com/tdewolff/test"
)

func TestParseNumber(t *testing.T) {
	tests := []struct {
		s   string
		num int64
		dec int
		n   int
	}{
		{"5", 5, 0, 1},
		{"-5", -5, 0, 2},
		{"5,0", 50, 1, 3},
		{"5,0a", 50, 1, 3},
		{"-1000,00", -100000, 2, 8},
		{"9223372036854775807", 9223372036854775807, 0, 19},
		{"-9223372036854775807", -9223372036854775807, 0, 20},
		{"-9223372036854775808", -9223372036854775808, 0, 20},
		{"92233720368547758070", 9223372036854775807, 0, 19},
		{"-92233720368547758080", -9223372036854775808, 0, 20},
	}
	for _, tt := range tests {
		t.Run(tt.s, func(t *testing.T) {
			num, dec, n := ParseNumber([]byte(tt.s), '.', ',')
			test.T(t, []interface{}{num, dec, n}, []interface{}{tt.num, tt.dec, tt.n})
		})
	}
}

func TestAppendNumber(t *testing.T) {
	tests := []struct {
		num int64
		dec int
		s   string
	}{
		{0, 0, "0"},
		{0, -1, "0"},
		{0, 2, "0,00"},
		{1, 2, "0,01"},
		{-1, 2, "-0,01"},
		{100, 2, "1,00"},
		{-100, 2, "-1,00"},
		{1000, 0, "1.000"},
		{100000, 2, "1.000,00"},
		{123456789012, 2, "1.234.567.890,12"},
		{9223372036854775807, 2, "92.233.720.368.547.758,07"},
		{-9223372036854775808, 2, "-92.233.720.368.547.758,08"},
	}

	for _, tt := range tests {
		t.Run(tt.s, func(t *testing.T) {
			num := AppendNumber(make([]byte, 0, 4), tt.num, tt.dec, 3, '.', ',')
			test.String(t, string(num), tt.s)
		})
	}

	// coverage
	test.String(t, string(AppendNumber(make([]byte, 0, 7), 12345, 1, 3, -1, -1)), "1.234,5")
}

func FuzzParseNumber(f *testing.F) {
	f.Add("5")
	f.Add("-5")
	f.Add("5,0")
	f.Add("5,0a")
	f.Add("-1000,00")
	f.Add("9223372036854775807")
	f.Add("-9223372036854775807")
	f.Add("-9223372036854775808")
	f.Add("92233720368547758070")
	f.Add("-92233720368547758080")
	f.Fuzz(func(t *testing.T, s string) {
		ParseNumber([]byte(s), '.', ',')
	})
}

func FuzzAppendNumber(f *testing.F) {
	f.Add(int64(0), 0)
	f.Add(int64(0), -1)
	f.Add(int64(0), 2)
	f.Add(int64(1), 2)
	f.Add(int64(-1), 2)
	f.Add(int64(100), 2)
	f.Add(int64(-100), 2)
	f.Add(int64(1000), 0)
	f.Add(int64(100000), 2)
	f.Add(int64(123456789012), 2)
	f.Add(int64(9223372036854775807), 2)
	f.Add(int64(-9223372036854775808), 2)
	f.Fuzz(func(t *testing.T, num int64, dec int) {
		AppendNumber([]byte{}, num, dec, 3, '.', ',')
	})
}