local tests = require('Module:UnitTests')
local m_palindromes = require('Module:palindromes')
local m_languages = require("Module:languages")
local function check_palindrome(word, expected, langcode, sc_code)
sc = sc_code and require('Module:scripts').getByCode(sc_code) or nil
tests:equals(
word,
m_palindromes.is_palindrome(word, m_languages.getByCode(langcode), sc),
expected
)
end
function tests:test_palindrome_en()
check_palindrome('a', false, "en")
check_palindrome('ab', false, "en")
check_palindrome('aa', false, "en")
check_palindrome('aba', true, "en")
check_palindrome('a.a', false, "en")
check_palindrome('abc', false, "en")
check_palindrome('AAA', false, "en")
check_palindrome('palindromemordnilap', true, "en")
check_palindrome('non-', false, "en")
-- unsure about these two cases:
--check_palindrome('7/7', false, 'en')
--check_palindrome('B & B', false, 'en')
check_palindrome("-n-", false, "en")
check_palindrome("I, man, am regal - a German am I", true, 'en')
check_palindrome("Never odd or even", true, 'en')
check_palindrome("If I had a hi-fi", true, 'en')
check_palindrome("Madam, I\'m Adam", true, 'en')
check_palindrome("Too hot to hoot", true, 'en')
check_palindrome("No lemons, no melon", true, 'en')
check_palindrome("Too bad I hid a boot", true, 'en')
check_palindrome("Lisa Bonet ate no basil", true, 'en')
check_palindrome("Warsaw was raw", true, 'en')
check_palindrome("Was it a car or a cat I saw?", true, 'en')
check_palindrome("Rise to vote, sir", true, 'en')
check_palindrome("Do geese see god?", true, 'en')
check_palindrome("\"Do nine men interpret?\" \"Nine men,\" I nod", true, 'en')
check_palindrome("Rats live on no evil star", true, 'en')
check_palindrome("Won\'t lovers revolt now?", true, 'en')
check_palindrome("Race fast, safe car", true, 'en')
check_palindrome("Pa\'s a sap", true, 'en')
check_palindrome("Ma is as selfless as I am", true, 'en')
check_palindrome("May a moody baby doom a yam?", true, 'en')
check_palindrome("Ah, Satan sees Natasha", true, 'en')
check_palindrome("No devil lived on", true, 'en')
check_palindrome("Lonely Tylenol", true, 'en')
check_palindrome("Not a banana baton", true, 'en')
check_palindrome("No \"x\" in \"Nixon\"", true, 'en')
check_palindrome("O, stone, be not so", true, 'en')
check_palindrome("O Geronimo, no minor ego", true, 'en')
check_palindrome("\"Naomi,\" I moan", true, 'en')
check_palindrome("\"A Toyota\'s a Toyota\"", true, 'en')
check_palindrome("A dog, a panic in a pagoda", true, 'en')
check_palindrome("Oh no! Don Ho!", true, 'en')
check_palindrome("Nurse, I spy gypsies - run!", true, 'en')
check_palindrome("Senile felines", true, 'en')
check_palindrome("Now I see bees I won", true, 'en')
check_palindrome("UFO tofu", true, 'en')
check_palindrome("We panic in a pew", true, 'en')
check_palindrome("Oozy rat in a sanitary zoo", true, 'en')
check_palindrome("God! A red nugget! A fat egg under a dog!", true, 'en')
check_palindrome("Go hang a salami, I\'m a lasagna hog", true, 'en')
check_palindrome("à la", true, 'en')
end
function tests:test_palindrome_he()
check_palindrome("ףרשנו רעבתן שבדבש ןתבער ונשרף", true, "he")
check_palindrome("פרשנו רעבתן שבדבש נתבער ונשרף", true, "he")
check_palindrome("ﭏ׳װױײ ט ייי־ווול״א׳", true, "he")
end
function tests:test_palindrome_grc()
check_palindrome("ΝΙΨΟΝ ΑΝΟΜΗΜΑΤΑ ΜΗ ΜΟΝΑΝ ΟΨΙΝ", true, 'grc')
check_palindrome("Νίψον ἀνομήματα, μὴ μόναν ὄψιν", true, 'grc')
end
function tests:test_palindrome_hu()
check_palindrome("szusz", true, 'hu')
check_palindrome("kérek", true, 'hu')
check_palindrome("kerék", true, 'hu')
check_palindrome("csúcs", true, 'hu')
end
function tests:test_palindrome_el()
check_palindrome("σορός", true, "el")
check_palindrome("αλλά", true, "el")
end
function tests:test_palindrome_cs()
check_palindrome("tázat", true, "cs")
end
function tests:test_palindrome_ota()
check_palindrome("قاپاق", true, "ota")
end
function tests:test_palindrome_ja()
check_palindrome("いかにもにがい", true, "ja")
check_palindrome("akka", false, "ja", "Latn")
check_palindrome("akka", false, "ja")
end
function tests:test_palindrome_ar()
check_palindrome("واحد", false, "ar")
check_palindrome("ترجم", false, "ar")
check_palindrome("ر", false, "ar")
check_palindrome("نون", true, "ar")
check_palindrome("باب", true, "ar")
check_palindrome("تحت", true, "ar")
check_palindrome("يرى", true, "ar")
check_palindrome("آباء", true, "ar")
check_palindrome("أشاء", true, "ar")
check_palindrome("يجئ", true, "ar")
check_palindrome("أنا", true, "ar")
check_palindrome("همة", true, "ar")
check_palindrome("وضؤ", true, "ar")
end
function tests:test_palindrome_bho()
check_palindrome("नून", false, "bho")
check_palindrome("ननून", true, "bho")
check_palindrome("नूनू", true, "bho")
check_palindrome("प्रतंप्र", true, "bho")
end
return tests