Модуль:StatEngine/Tester

Версия от 17:37, 1 мая 2026; Ламантепер (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Для документации этого модуля может быть создана страница Модуль: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