libpostal/parser_test.go

85 lines
2.0 KiB
Go
Raw Normal View History

2026-08-08 08:50:11 -04:00
package libpostal
import (
"math/rand/v2"
"os"
"testing"
)
var TheParser *Parser
func TestMain(m *testing.M) {
exitCode := func() int {
parser, err := NewParser()
if err != nil {
panic("error building new parser: " + err.Error())
}
defer parser.Close()
TheParser = parser
return m.Run()
}()
os.Exit(exitCode)
}
type TestAddress struct {
AddressToParse string
Address Address
}
var TheTestAddresses = []TestAddress{
{"1 S Huron St. Ypsilanti, MI 48197", Address{"1", "s huron st.", "ypsilanti", "mi", "48197"}},
{"1600 Pennsylvania Avenue NW Washington DC 20500", Address{"1600", "pennsylvania avenue nw", "washington", "dc", "20500"}},
{"12633 2/9 Memorial Dr, Houston, TX 77024", Address{"12633 2/9", "memorial dr", "houston", "tx", "77024"}},
}
func TestParsing(t *testing.T) {
options := GetDefaultAddressParserOptions()
for _, testAddress := range TheTestAddresses {
parsed, err := TheParser.Parse(testAddress.AddressToParse, options)
if err != nil {
t.Fatalf("Error: %v\n", err)
} else if want, got := testAddress.Address, parsed; want != got {
t.Fatalf("Error: wanted %+v; got %+v\n", want, got)
}
}
}
func TestParseEmptyString(t *testing.T) {
addressToParse := ""
options := GetDefaultAddressParserOptions()
parsed, err := TheParser.Parse(addressToParse, options)
if err == nil {
t.Fatalf("error: empty address should be invalid\n")
} else if want, got := (Address{}), parsed; want != got {
t.Fatalf("error: wanted %+v; got %+v\n", want, got)
}
}
func BenchmarkSetup(b *testing.B) {
for b.Loop() {
if !setup() {
panic("error setting up\n")
} else if !setupParser() {
panic("error setting up parser\n")
}
}
}
func BenchmarkParse(b *testing.B) {
randomAddress := func() TestAddress {
return TheTestAddresses[rand.IntN(len(TheTestAddresses))]
}
options := GetDefaultAddressParserOptions()
for b.Loop() {
TheParser.Parse(randomAddress().AddressToParse, options)
}
}
func BenchmarkTearDown(b *testing.B) {
for b.Loop() {
tearDownParser()
tearDown()
}
}