বিষয়বস্তুতে চলুন

মডিউল:string utilities/testcases

উইকিঅভিধান, মুক্ত অভিধান থেকে

এই মডিউলের জন্য মডিউল:string utilities/testcases/নথি-এ নথিপত্র তৈরি করা হয়ে থাকতে পারে

local tests = require("Module:UnitTests")
local ps = require("Module:string utilities").pattern_simplifier

function tests:check_pattern_simplifier(pattern, expected)
	tests:equals(pattern, tostring(ps(pattern)), tostring(expected))
end

function tests:test_pattern_simplifier()
	local examples = {
		{"", ""},
		{"%", false},
		{"%b()", "%b()"},
		{"%b()", false},
		{"%b()", false},
		{"%b()", false},
		{"%b()a", "%b()a"},
		{"%b()%a", false},
		{"%a", false},
		{"%b", false},
		{"%c", false},
		{"%d", false},
		{"%e", "%e"},
		{"%f", false},
		{"%g", "%g"},
		{"%h", "%h"},
		{"%i", "%i"},
		{"%j", "%j"},
		{"%k", "%k"},
		{"%l", false},
		{"%m", "%m"},
		{"%n", "%n"},
		{"%o", "%o"},
		{"%p", false},
		{"%q", "%q"},
		{"%r", "%r"},
		{"%s", false},
		{"%t", "%t"},
		{"%u", false},
		{"%v", "%v"},
		{"%w", false},
		{"%x", false},
		{"%y", "%y"},
		{"%z", "%z"},
		{"%A", false},
		{"%B", "%B"},
		{"%C", false},
		{"%D", false},
		{"%E", "%E"},
		{"%F", "%F"},
		{"%G", "%G"},
		{"%H", "%H"},
		{"%I", "%I"},
		{"%J", "%J"},
		{"%K", "%K"},
		{"%L", false},
		{"%M", "%M"},
		{"%N", "%N"},
		{"%O", "%O"},
		{"%P", false},
		{"%Q", "%Q"},
		{"%R", "%R"},
		{"%S", false},
		{"%T", "%T"},
		{"%U", false},
		{"%V", "%V"},
		{"%W", false},
		{"%X", false},
		{"%Y", "%Y"},
		{"%Z", "[\1-\127\192-\255][\128-\191]*"},
		{"%ж", "%ж"},
		{"%ж?", false},
		{"%%a", "%%a"},
		{"%%c", "%%c"},
		{"%%d", "%%d"},
		{"%%l", "%%l"},
		{"%%p", "%%p"},
		{"%%s", "%%s"},
		{"%%u", "%%u"},
		{"%%w", "%%w"},
		{"%%x", "%%x"},
		{"%%A", "%%A"},
		{"%%C", "%%C"},
		{"%%D", "%%D"},
		{"%%L", "%%L"},
		{"%%P", "%%P"},
		{"%%S", "%%S"},
		{"%%U", "%%U"},
		{"%%W", "%%W"},
		{"%%X", "%%X"},
		{"%%Z", "%%Z"},
		{"%%%a", false},
		{"%%%c", false},
		{"%%%d", false},
		{"%%%l", false},
		{"%%%p", false},
		{"%%%s", false},
		{"%%%u", false},
		{"%%%w", false},
		{"%%%x", false},
		{"%%%A", false},
		{"%%%C", false},
		{"%%%D", false},
		{"%%%L", false},
		{"%%%P", false},
		{"%%%S", false},
		{"%%%U", false},
		{"%%%W", false},
		{"%%%X", false},
		{"%%%Z", "%%[\1-\127\192-\255][\128-\191]*"},
		{"%z%a", false},
		{"%Z%a", false},
		{"()", false},
		{"%()", "%()"},
		{"(foo)", "(foo)"},
		{"((foo)bar)", "((foo)bar)"},
		{("( )"):rep(32), ("( )"):rep(32)},
		{("( )"):rep(33), false},
		{("("):rep(33), false},
		{("( )"):rep(32) .. "%( )", ("( )"):rep(32) .. "%( )"},
		{".", "[^\128-\191][\128-\191]*"},
		{("."):rep(5), ("[^\128-\191][\128-\191]*"):rep(5)},
		{"foo.*.", "foo.*[^\128-\191][\128-\191]*"},
		{"foo.+.", "foo[^\128-\191].*[^\128-\191][\128-\191]*"},
		{"foo.-.", "foo.-[^\128-\191][\128-\191]*"},
		{"foo.?.", "foo[^\128-\191]?[\128-\191]*[^\128-\191][\128-\191]*"},
		{"foo%Z*%Z", "foo%Z*[\1-\127\192-\255][\128-\191]*"},
		{"foo%Z+%Z", "foo[\1-\127\192-\255]%Z*[\1-\127\192-\255][\128-\191]*"},
		{"foo%Z-%Z", "foo%Z-[\1-\127\192-\255][\128-\191]*"},
		{"foo%Z?%Z", "foo[\1-\127\192-\255]?[\128-\191]*[\1-\127\192-\255][\128-\191]*"},
		{"foo%Z+*%Z", "foo[\1-\127\192-\255]%Z**[\1-\127\192-\255][\128-\191]*"},
		{"foo%Z++%Z", "foo[\1-\127\192-\255]%Z*+[\1-\127\192-\255][\128-\191]*"},
		{"foo%Z+-%Z", "foo[\1-\127\192-\255]%Z*-[\1-\127\192-\255][\128-\191]*"},
		{"foo%Z+?%Z", "foo[\1-\127\192-\255]%Z*?[\1-\127\192-\255][\128-\191]*"},
		{"fooжbar", "fooжbar"},
		{"fooж*bar", false},
		{"fooж+bar", "foo\208[ж]*\182bar"},
		{"fooж-bar", false},
		{"fooж?bar", false},
		{"fooж+*bar", "foo\208[ж]*\182%*bar"},
		{"fooж++bar", "foo\208[ж]*\182%+bar"},
		{"fooж+-bar", "foo\208[ж]*\182%-bar"},
		{"fooж+?bar", "foo\208[ж]*\182%?bar"},
		{"fooကbar", "fooကbar"},
		{"fooက*bar", false},
		{"fooက+bar", false},
		{"fooက-bar", false},
		{"fooက?bar", false},
		{"fooက+*bar", false},
		{"fooက++bar", false},
		{"fooက+-bar", false},
		{"fooက+?bar", false},
		{"foo𠀀bar", "foo𠀀bar"},
		{"foo𠀀*bar", false},
		{"foo𠀀+bar", false},
		{"foo𠀀-bar", false},
		{"foo𠀀?bar", false},
		{"foo𠀀+*bar", false},
		{"foo𠀀++bar", false},
		{"foo𠀀+-bar", false},
		{"foo𠀀+?bar", false},
		{"foo[", false},
		{"foo[^", false},
		{"[]", false},
		{"[^]", false},
		{"[%]", false},
		{"foo[^b]ar", false},
		{"foo[^bar]baz", false},
		{"foo[^]]bar", false},
		{"foo[^%]]bar", false},
		{"foo%[^bar]baz", "foo%[^bar]baz"},
		{"foo%[%a]bar", false},
		{"foo[b]ar", "foo[b]ar"},
		{"foo[%a]bar", false},
		{"foo[%b]ar", "foo[%b]ar"},
		{"foo[bar", false},
		{"foo[bar%", false},
		{"foo[bar]baz", "foo[bar]baz"},
		{"foo[bar]%a", false},
		{"foo[bar%abaz]", false},
		{"foo[bar%bbaz]", "foo[bar%bbaz]"},
		{"foo[bar%zbaz]", "foo[bar%zbaz]"},
		{"foo[barжbaz]", false},
		{"foo[barကbaz]", false},
		{"foo[bar𠀀baz]", false},
		{"foo[bar%жbaz]", false},
		{"foo[bar%ကbaz]", false},
		{"foo[bar%𠀀baz]", false},
		{"foo[]bar%abaz]", false},
		{"foo[]bar%bbaz]", "foo[]bar%bbaz]"},
		{"foo[]bar%zbaz]", "foo[]bar%zbaz]"},
		{"foo[]barжbaz]", false},
		{"foo[]barကbaz]", false},
		{"foo[]bar𠀀baz]", false},
		{"foo[]bar%жbaz]", false},
		{"foo[]bar%ကbaz]", false},
		{"foo[]bar%𠀀baz]", false},
		{"foo[%]bar%abaz]", false},
		{"foo[%]bar%bbaz]", "foo[%]bar%bbaz]"},
		{"foo[%]bar%zbaz]", "foo[%]bar%zbaz]"},
		{"foo[%]barжbaz]", false},
		{"foo[%]barကbaz]", false},
		{"foo[%]bar𠀀baz]", false},
		{"foo[%]bar%жbaz]", false},
		{"foo[%]bar%ကbaz]", false},
		{"foo[%]bar%𠀀baz]", false},
		{"foo[bar%]baz%a]", false},
		{"foo[bar%]baz%b]", "foo[bar%]baz%b]"},
		{"foo[bar%]baz%z]", "foo[bar%]baz%z]"},
		{"foo[bar%]bazж]", false},
		{"foo[bar%]bazက]", false},
		{"foo[bar%]baz𠀀]", false},
		{"foo[bar%]baz%ж]", false},
		{"foo[bar%]baz%က]", false},
		{"foo[bar%]baz%𠀀]", false},
		{"foo[bar%]%abaz]", false},
		{"foo[bar%]%bbaz]", "foo[bar%]%bbaz]"},
		{"foo[bar%]%zbaz]", "foo[bar%]%zbaz]"},
		{"foo[bar%]жbaz]", false},
		{"foo[bar%]ကbaz]", false},
		{"foo[bar%]𠀀baz]", false},
		{"foo[bar%]%жbaz]", false},
		{"foo[bar%]%ကbaz]", false},
		{"foo[bar%]%𠀀baz]", false},
		{"foo[bar%%abaz]", "foo[bar%%abaz]"},
		{"foo[bar%%bbaz]", "foo[bar%%bbaz]"},
		{"foo[bar%%zbaz]", "foo[bar%%zbaz]"},
		{"foo[bar%%жbaz]", false},
		{"foo[bar%%ကbaz]", false},
		{"foo[bar%%𠀀baz]", false},
		{"foo[bar%%%жbaz]", false},
		{"foo[bar%%%ကbaz]", false},
		{"foo[bar%%%𠀀baz]", false},
		{"foo[bar]*baz", "foo[bar]*baz"},
		{"foo[bar]+baz", "foo[bar]+baz"},
		{"foo[bar]-baz", "foo[bar]-baz"},
		{"foo[bar]?baz", "foo[bar]?baz"},
		{"foo[bar]**baz", "foo[bar]**baz"},
		{"foo[bar]++baz", "foo[bar]++baz"},
		{"foo[bar]--baz", "foo[bar]--baz"},
		{"foo[bar]??baz", "foo[bar]??baz"},
		{"foo[БАР]baz", "foo\208[\144-\145\160]baz"},
		{"foo[БА%", false},
		{"foo[%БАР]baz", "foo\208[\144-\145\160]baz"},
		{"foo[Б%АР]baz", "foo\208[\144-\145\160]baz"},
		{"foo[%Б%А%Р]baz", "foo\208[\144-\145\160]baz"},
		{"foo[%Б%a%Р]baz", false},
		{"foo[БАР]*baz", false},
		{"foo[БАР]+baz", "foo\208[\144-\145\160\208]*[\144-\145\160]baz"},
		{"foo[БАР]-baz", false},
		{"foo[БАР]?baz", false},
		{"foo[БАР]+*baz", "foo\208[\144-\145\160\208]*[\144-\145\160]%*baz"},
		{"foo[БАР]++baz", "foo\208[\144-\145\160\208]*[\144-\145\160]%+baz"},
		{"foo[БАР]+-baz", "foo\208[\144-\145\160\208]*[\144-\145\160]%-baz"},
		{"foo[БАР]+?baz", "foo\208[\144-\145\160\208]*[\144-\145\160]%?baz"},
		{"foo[БАРbaz]qux", false},
		{"foo[bar%Б]baz", false},
		{"foo[БАР%e]baz", false},
		{"foo[бар]baz", false},
		{"foo[бар]*baz", false},
		{"foo[бар]+baz", false},
		{"foo[бар]-baz", false},
		{"foo[бар]?baz", false},
		{"foo[バー]baz", "foo\227\131[\144\188]baz"},
		{"foo[バー]*baz", false},
		{"foo[バー]+baz", false},
		{"foo[バー]-baz", false},
		{"foo[バー]?baz", false},
		{"foo%f", false},
		{"foo%fbar", false},
		{"foo%f[", false},
		{"foo%f[^", false},
		{"%f[]", false},
		{"%f[^]", false},
		{"%f[%]", false},
		{"foo%f[^b]ar", false},
		{"foo%f[^bar]baz", false},
		{"foo%f[^]]bar", false},
		{"foo%f[^%]]bar", false},
		{"foo%f%[^bar]baz", false},
		{"foo%f%[%a]bar", false},
		{"foo%f[b]ar", "foo%f[b]ar"},
		{"foo%f[%a]bar", false},
		{"foo%f[%b]ar", "foo%f[%b]ar"},
		{"foo%f[bar", false},
		{"foo%f[bar%", false},
		{"foo%f[bar]baz", "foo%f[bar]baz"},
		{"foo%f[bar]%a", false},
		{"foo%f[bar%abaz]", false},
		{"foo%f[bar%bbaz]", "foo%f[bar%bbaz]"},
		{"foo%f[bar%zbaz]", "foo%f[bar%zbaz]"},
		{"foo%f[barжbaz]", false},
		{"foo%f[barကbaz]", false},
		{"foo%f[bar𠀀baz]", false},
		{"foo%f[bar%жbaz]", false},
		{"foo%f[bar%ကbaz]", false},
		{"foo%f[bar%𠀀baz]", false},
		{"foo%f[]bar%abaz]", false},
		{"foo%f[]bar%bbaz]", "foo%f[]bar%bbaz]"},
		{"foo%f[]bar%zbaz]", "foo%f[]bar%zbaz]"},
		{"foo%f[]barжbaz]", false},
		{"foo%f[]barကbaz]", false},
		{"foo%f[]bar𠀀baz]", false},
		{"foo%f[]bar%жbaz]", false},
		{"foo%f[]bar%ကbaz]", false},
		{"foo%f[]bar%𠀀baz]", false},
		{"foo%f[%]bar%abaz]", false},
		{"foo%f[%]bar%bbaz]", "foo%f[%]bar%bbaz]"},
		{"foo%f[%]bar%zbaz]", "foo%f[%]bar%zbaz]"},
		{"foo%f[%]barжbaz]", false},
		{"foo%f[%]barကbaz]", false},
		{"foo%f[%]bar𠀀baz]", false},
		{"foo%f[%]bar%жbaz]", false},
		{"foo%f[%]bar%ကbaz]", false},
		{"foo%f[%]bar%𠀀baz]", false},
		{"foo%f[bar%]baz%a]", false},
		{"foo%f[bar%]baz%b]", "foo%f[bar%]baz%b]"},
		{"foo%f[bar%]baz%z]", "foo%f[bar%]baz%z]"},
		{"foo%f[bar%]bazж]", false},
		{"foo%f[bar%]bazက]", false},
		{"foo%f[bar%]baz𠀀]", false},
		{"foo%f[bar%]baz%ж]", false},
		{"foo%f[bar%]baz%က]", false},
		{"foo%f[bar%]baz%𠀀]", false},
		{"foo%f[bar%]%abaz]", false},
		{"foo%f[bar%]%bbaz]", "foo%f[bar%]%bbaz]"},
		{"foo%f[bar%]%zbaz]", "foo%f[bar%]%zbaz]"},
		{"foo%f[bar%]жbaz]", false},
		{"foo%f[bar%]ကbaz]", false},
		{"foo%f[bar%]𠀀baz]", false},
		{"foo%f[bar%]%жbaz]", false},
		{"foo%f[bar%]%ကbaz]", false},
		{"foo%f[bar%]%𠀀baz]", false},
		{"foo%f[bar%%abaz]", "foo%f[bar%%abaz]"},
		{"foo%f[bar%%bbaz]", "foo%f[bar%%bbaz]"},
		{"foo%f[bar%%zbaz]", "foo%f[bar%%zbaz]"},
		{"foo%f[bar%%жbaz]", false},
		{"foo%f[bar%%ကbaz]", false},
		{"foo%f[bar%%𠀀baz]", false},
		{"foo%f[bar%%%жbaz]", false},
		{"foo%f[bar%%%ကbaz]", false},
		{"foo%f[bar%%%𠀀baz]", false},
		{"foo%f[bar]*baz", "foo%f[bar]*baz"},
		{"foo%f[bar]+baz", "foo%f[bar]+baz"},
		{"foo%f[bar]-baz", "foo%f[bar]-baz"},
		{"foo%f[bar]?baz", "foo%f[bar]?baz"},
		{"foo%f[bar]**baz", "foo%f[bar]**baz"},
		{"foo%f[bar]++baz", "foo%f[bar]++baz"},
		{"foo%f[bar]--baz", "foo%f[bar]--baz"},
		{"foo%f[bar]??baz", "foo%f[bar]??baz"},
		{"foo%f[БАР]baz", false},
		{"foo%f[БА%", false},
		{"foo%f[%БАР]baz", false},
		{"foo%f[Б%АР]baz", false},
		{"foo%f[%Б%А%Р]baz", false},
		{"foo%f[%Б%a%Р]baz", false},
		{"foo%f[БАР]*baz", false},
		{"foo%f[БАР]+baz", false},
		{"foo%f[БАР]-baz", false},
		{"foo%f[БАР]?baz", false},
		{"foo%f[БАРbaz]qux", false},
		{"foo%f[bar%Б]baz", false},
		{"foo%f[БАР%e]baz", false},
		{"foo%f[бар]baz", false},
		{"foo%f[бар]*baz", false},
		{"foo%f[бар]+baz", false},
		{"foo%f[бар]-baz", false},
		{"foo%f[бар]?baz", false},
		{"foo%f[バー]baz", false},
		{"foo%f[バー]*baz", false},
		{"foo%f[バー]+baz", false},
		{"foo%f[バー]-baz", false},
		{"foo%f[バー]?baz", false},
	}

	self:iterate(examples, "check_pattern_simplifier")
end

return tests