85 lines
2.0 KiB
Go
85 lines
2.0 KiB
Go
|
|
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()
|
||
|
|
}
|
||
|
|
}
|