package yqlib

import (
	"strings"
	"testing"
)

func TestDeepMatch(t *testing.T) {
	var tests = []struct {
		name    string
		pattern string
		ok      bool
	}{
		{"", "", true},
		{"<<", "<<", true},
		{"", "x", false},
		{"x", "", false},
		{"abc", "abc", true},
		{"abc", "*", true},
		{"abc", "*c", true},
		{"abc", "*b", false},
		{"abc", "a*", true},
		{"abc", "b*", false},
		{"a", "a*", true},
		{"a", "*a", true},
		{"axbxcxdxe", "a*b*c*d*e*", true},
		{"axbxcxdxexxx", "a*b*c*d*e*", true},
		{"abxbbxdbxebxczzx", "a*b?c*x", true},
		{"abxbbxdbxebxczzy", "a*b?c*x", false},
		{strings.Repeat("a", 100), "a*a*a*a*b", false},
		{"xxx", "*x", true},
	}

	for _, tt := range tests {
		t.Run(tt.name+" "+tt.pattern, func(t *testing.T) {
			if want, got := tt.ok, deepMatch(tt.name, tt.pattern); want != got {
				t.Errorf("Expected %v got %v", want, got)
			}
		})
	}
}
