Home

Awesome

Radix Circle CI GoDoc Coverage Status

Package glob provides a trie(also known as prefix-tree) that supports wildcard character '*'.

	func TestTree(t *testing.T) {
		patterns := []struct {
			s string
			i interface{}
		}{
			{"*abcd*ef*", 1},
			{"*.google.com", 2},
			{"http://example.com/books/*", 3},
			{"*://example.com/movies", 4},
			{`http://example.com/\*`, 5},
			{`http://example.com/*`, 6},
			{"你好*世界*", 7},
			{`foo\`, 8},
			{`b\ar`, 9},
		}
		data := []struct {
			s string
			v interface{}
		}{
			{"abcdef", 1},
			{"abcdefef", 1},
			{"abcabcdefgef", 1},
			{"google.com", nil},
			{"www.google.com", 2},
			{"http://example.com/books/", 3},
			{"http://example.com/", 6},
			{"http://example.com/*", 5},
			{"你好世界", 7},
			{"你你好世界", nil},
			{"你好世界世界界界", 7},
			{"你好,世界", 7},
			{"你好,世界。", 7},
			{`foo\`, nil},
			{`foo`, 8},
			{`b\ar`, nil},
			{`bar`, 9},
		}

		tr := &Trie{}
		for _, p := range patterns {
			tr.Add(p.s, p.i)
		}

		for _, data := range data {
			v, ok := tr.Lookup(data.s)
			if data.v == nil {
				assert.False(t, ok)
				assert.Nil(t, v)
			} else {
				assert.True(t, ok)
				assert.Equal(t, data.v, v)
			}
		}

	}