Модуль:StatEngine/Tester
Для документации этого модуля может быть создана страница Модуль:StatEngine/Tester/doc
-- =========================================================================
-- Модуль:StatEngine/Tester
-- Сравнивает вывод нового RatingBuilder со старым костылём Data/Rating
-- =========================================================================
local p = {}
local Builder = require('Модуль:StatEngine/RatingBuilder')
local OldRatingDB = require('Модуль:Data/Rating')
function p.test_year(frame)
local year = tonumber(frame.args[1] or 2006)
local year_str = tostring(year)
local success, db_tournaments = pcall(require, 'Модуль:Data/Tournaments/' .. year_str)
if not success then return "БД турниров за " .. year_str .. " не найдена!" end
-- Генерируем результаты новым движком
local new_results = Builder.build_year(year, db_tournaments)
-- Достаем эталонные результаты из старой базы
local old_results = {}
for tourney, years_data in pairs(OldRatingDB) do
if years_data[year_str] then
old_results[tourney] = years_data[year_str]
end
end
local errors = {}
local checked_teams = 0
local new_teams_count = 0
-- Считаем, сколько команд вообще сгенерировал новый движок
for tourney, teams in pairs(new_results) do
for team, val in pairs(teams) do
new_teams_count = new_teams_count + 1
end
end
-- Сравниваем (итерируясь по старой базе)
for tourney, teams in pairs(old_results) do
for team, old_val in pairs(teams) do
checked_teams = checked_teams + 1
local new_val = new_results[tourney] and new_results[tourney][team]
if old_val ~= new_val then
table.insert(errors, string.format("Ошибка: %s [%s] -> В старой БД: '%s', в новой: '%s'",
tourney, team, tostring(old_val), tostring(new_val)))
end
end
end
-- Формируем отчет
local report = string.format("'''ТЕСТ ГОДА %d'''\n\n", year)
report = report .. string.format("Команд в старой БД (проверено): %d\n", checked_teams)
report = report .. string.format("Команд сгенерировано новым движком: %d\n\n", new_teams_count)
if #errors == 0 then
report = report .. "✅ '''ИДЕАЛЬНОЕ СОВПАДЕНИЕ! 100%'''\n"
else
report = report .. "❌ '''НАЙДЕНЫ РАСХОЖДЕНИЯ:'''\n"
for _, err in ipairs(errors) do
report = report .. "* " .. err .. "\n"
end
end
return report
end
return p