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() } }