diff --git a/Makefile b/Makefile index 30d8ccf..b59e27e 100644 --- a/Makefile +++ b/Makefile @@ -2,3 +2,6 @@ test: go test -coverprofile=coverage.out ./... go tool cover -html=coverage.out -o coverage.html rm coverage.out + +bench: + go test -bench=. -cpuprofile=cpu.out -memprofile=mem.out diff --git a/api_test.go b/api_test.go index ffe0a5d..d48302e 100644 --- a/api_test.go +++ b/api_test.go @@ -5,8 +5,8 @@ import ( "testing" ) -func TestFatQRAPI(t *testing.T) { - input := "A:123456789*B:999999990*C:PT*D:FT*E:N*F:20191231*" + +var ( + completeInput = "A:123456789*B:999999990*C:PT*D:FT*E:N*F:20191231*" + "G:FT AB2019/0035*H:CSDF7T5H-0035*I1:PT*I2:12000.00*I3:15000.00*" + "I4:900.00*I5:50000.00*I6:6500.00*I7:80000.00*I8:18400.00*J1:PT-AC*" + "J2:10000.00*J3:25000.56*J4:1000.02*J5:75000.00*J6:6750.00*" + @@ -14,6 +14,10 @@ func TestFatQRAPI(t *testing.T) { "K5:25000.00*K6:3000.00*K7:40000.00*K8:8800.00*L:100.00*M:25.00*" + "N:64000.02*O:513600.58*P:100.00*Q:kLp0*R:9999*" + "S:TB;PT00000000000000000000000;513500.58" +) + +func TestFatQRAPI(t *testing.T) { + input := completeInput var qr gofatqr.FatQR err := qr.Scan(input, 0) @@ -21,3 +25,15 @@ func TestFatQRAPI(t *testing.T) { t.Errorf("Should not have occurred an error for: %s, %+v", input, err) } } + +func BenchmarkFatQRScan(b *testing.B) { + b.ReportAllocs() + + for b.Loop() { + var qr gofatqr.FatQR + err := qr.Scan(completeInput, 0) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } + } +} diff --git a/fatQR.go b/fatQR.go index d3e4a46..aa650f2 100644 --- a/fatQR.go +++ b/fatQR.go @@ -627,7 +627,7 @@ func (fq *FatQR) scanPart(part []string) error { func (fq *FatQR) scanParts(parts []string) error { for k := range parts { - keyValuePair := strings.Split(parts[k], ":") + keyValuePair := strings.SplitN(parts[k], ":", 2) if len(keyValuePair) != 2 { return fmt.Errorf("failed to parse key value pair: %s", parts[k]) }