LU Lua  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Сопровождение Lua 5.1–5.4

Тест по теме «Сопровождение Lua 5.1–5.4» проверяет чтение кода, поиск скрытых допущений и выбор решения для обычных и граничных сценариев. В нём 30 вопросов, из них 18 содержат фрагменты Lua. Условия отдельно отмечают случаи, зависящие от версии языка или внешней библиотеки.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 85 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 30
Какое правило останется верным на другом входе этого же фрагмента? Ответ должен описывать основной механизм раздела «Различия стандартов».
LuaLua · Различия стандартов · разбор 1
local function load_env(source,name,env)
  if _VERSION=="Lua 5.1" then
    local fn=assert(loadstring(source,name)); setfenv(fn,env); return fn
  end
  return assert(load(source,name,"t",env))
end
Вопрос 2 из 30
Какой отказ должен быть воспроизводимым в тесте? Ищется граничное следствие правила из раздела «Различия стандартов».
LuaLua · Различия стандартов · разбор 2
local function reproduce_case()
  local function load_env(source,name,env)
    if _VERSION=="Lua 5.1" then
      local fn=assert(loadstring(source,name)); setfenv(fn,env); return fn
    end
    return assert(load(source,name,"t",env))
  end
end
reproduce_case()
Вопрос 3 из 30
Код переписывают без изменения внешнего поведения. Какой контракт должен сохраниться? Речь идёт о центральном правиле раздела «Различия стандартов».
LuaLua · Различия стандартов · разбор 3
do
  local function load_env(source,name,env)
    if _VERSION=="Lua 5.1" then
      local fn=assert(loadstring(source,name)); setfenv(fn,env); return fn
    end
    return assert(load(source,name,"t",env))
  end
end
Вопрос 4 из 30
Нужно сделать поведение «Различия стандартов» предсказуемым для следующего разработчика. Что выбрать? Нужна эксплуатационная граница раздела «Различия стандартов».
Вопрос 5 из 30
Какое утверждение о разделе «Различия стандартов» точно и не обещает лишнего? Ответ должен охватывать весь раздел «Различия стандартов».
Вопрос 6 из 30
Какой механизм показан в строке «print(type(value),math.type and math.type(value),value+1)»? Ответ должен описывать основной механизм раздела «Целочисленный тип».
LuaLua · Целочисленный тип · разбор 1
local value=math.maxinteger or 2^53
print(type(value),math.type and math.type(value),value+1)
Вопрос 7 из 30
Обычный запуск проходит. Какое граничное поведение обязан проверить второй тест? Ищется граничное следствие правила из раздела «Целочисленный тип».
LuaLua · Целочисленный тип · разбор 2
local function reproduce_case()
  local value=math.maxinteger or 2^53
  print(type(value),math.type and math.type(value),value+1)
end
reproduce_case()
Вопрос 8 из 30
Что здесь является частью контракта, а не случайностью текущей записи? Нужен основной контракт раздела «Целочисленный тип».
LuaLua · Целочисленный тип · разбор 3
do
  local value=math.maxinteger or 2^53
  print(type(value),math.type and math.type(value),value+1)
end
Вопрос 9 из 30
Код по разделу «Целочисленный тип» уходит в эксплуатацию. Какое ограничение нельзя прятать внутри реализации? Нужна эксплуатационная граница раздела «Целочисленный тип».
Вопрос 10 из 30
Что нельзя вывести из одного удачного примера, но нужно знать о разделе «Целочисленный тип»? Выберите описание, объединяющее механизм и границу раздела «Целочисленный тип».
Вопрос 11 из 30
Что нужно знать о Lua, прежде чем предсказывать результат этого кода? Нужна именно центральная гарантия раздела «Операторы».
LuaLua · Операторы · разбор 1
local function idiv(a,b)
  if _VERSION=="Lua 5.1" or _VERSION=="Lua 5.2" then return math.floor(a/b) end
  return a//b
end
print(idiv(-3,2))
Вопрос 12 из 30
Какое наблюдение нужно зафиксировать при повторном вызове? Нужен отрицательный сценарий для раздела «Операторы».
LuaLua · Операторы · разбор 2
local function reproduce_case()
  local function idiv(a,b)
    if _VERSION=="Lua 5.1" or _VERSION=="Lua 5.2" then return math.floor(a/b) end
    return a//b
  end
  print(idiv(-3,2))
end
reproduce_case()
Вопрос 13 из 30
Какое правило должно остаться наблюдаемым после правки? Нужен основной контракт раздела «Операторы».
LuaLua · Операторы · разбор 3
do
  local function idiv(a,b)
    if _VERSION=="Lua 5.1" or _VERSION=="Lua 5.2" then return math.floor(a/b) end
    return a//b
  end
  print(idiv(-3,2))
end
Вопрос 14 из 30
Новый интерфейс скрывает детали раздела «Операторы». Что всё равно должно быть явно проверяемо? Нужна эксплуатационная граница раздела «Операторы».
Вопрос 15 из 30
Какое утверждение о разделе «Операторы» наиболее полное и точное? Выберите описание, объединяющее механизм и границу раздела «Операторы».
Вопрос 16 из 30
Какое правило точнее всего описывает происходящее в строке «compat.searchers=package.searchers or package.loaders»? Выберите основное правило раздела «Совместимые библиотеки».
LuaLua · Совместимые библиотеки · разбор 1
local compat={}
compat.unpack=table.unpack or unpack
compat.searchers=package.searchers or package.loaders
compat.rawlen=rawlen or function(t) return #t end
return compat
Вопрос 17 из 30
Обычный запуск проходит. Какое граничное поведение обязан проверить второй тест? Ищется граничное следствие правила из раздела «Совместимые библиотеки».
LuaLua · Совместимые библиотеки · разбор 2
local function reproduce_case()
  local compat={}
  compat.unpack=table.unpack or unpack
  compat.searchers=package.searchers or package.loaders
  compat.rawlen=rawlen or function(t) return #t end
  return compat
end
reproduce_case()
Вопрос 18 из 30
Какой инвариант нельзя потерять при упрощении этого фрагмента? Речь идёт о центральном правиле раздела «Совместимые библиотеки».
LuaLua · Совместимые библиотеки · разбор 3
do
  local compat={}
  compat.unpack=table.unpack or unpack
  compat.searchers=package.searchers or package.loaders
  compat.rawlen=rawlen or function(t) return #t end
  return compat
end
Вопрос 19 из 30
Для раздела «Совместимые библиотеки» выбирают между коротким трюком и ясным контрактом. Что предпочтительнее? Ответ должен выражать проверяемое следствие раздела «Совместимые библиотеки».
Вопрос 20 из 30
Что в разделе «Совместимые библиотеки» является гарантией, а не привычкой конкретного проекта? Выберите описание, объединяющее механизм и границу раздела «Совместимые библиотеки».
Вопрос 21 из 30
Какое правило Lua нужно применить, чтобы верно прочитать этот фрагмент? Ответ должен описывать основной механизм раздела «Разбор отказов».
LuaLua · Разбор отказов · разбор 1
local report={runtime=_VERSION,jit=jit and jit.version or nil,
  number=tostring(0.1+0.2),module_versions=versions()}
local ok,err=xpcall(run,debug.traceback)
write_report(report,ok,err)
Вопрос 22 из 30
Обычный запуск проходит. Какое граничное поведение обязан проверить второй тест? Ищется граничное следствие правила из раздела «Разбор отказов».
LuaLua · Разбор отказов · разбор 2
local function reproduce_case()
  local report={runtime=_VERSION,jit=jit and jit.version or nil,
    number=tostring(0.1+0.2),module_versions=versions()}
  local ok,err=xpcall(run,debug.traceback)
  write_report(report,ok,err)
end
reproduce_case()
Вопрос 23 из 30
После рефакторинга тесты должны защищать одно правило. Какое? Речь идёт о центральном правиле раздела «Разбор отказов».
LuaLua · Разбор отказов · разбор 3
do
  local report={runtime=_VERSION,jit=jit and jit.version or nil,
    number=tostring(0.1+0.2),module_versions=versions()}
  local ok,err=xpcall(run,debug.traceback)
  write_report(report,ok,err)
end
Вопрос 24 из 30
В модуле меняют «Разбор отказов» и хотят сохранить диагностируемость. Какой подход надёжнее? Ответ должен выражать проверяемое следствие раздела «Разбор отказов».
Вопрос 25 из 30
Какое правило лучше всего описывает границы раздела «Разбор отказов»? Ответ должен охватывать весь раздел «Разбор отказов».
Вопрос 26 из 30
Какой механизм показан в строке «local snapshot=export_data({numbers="decimal_strings",version=2})»? Нужна именно центральная гарантия раздела «Восстановление системы».
LuaLua · Восстановление системы · разбор 1
local snapshot=export_data({numbers="decimal_strings",version=2})
assert(run_migration(target_runtime,snapshot))
if not healthcheck() then rollback_runtime(previous_runtime,snapshot) end
Вопрос 27 из 30
Какой крайний случай важнее всего добавить к проверке? Нужен отрицательный сценарий для раздела «Восстановление системы».
LuaLua · Восстановление системы · разбор 2
local function reproduce_case()
  local snapshot=export_data({numbers="decimal_strings",version=2})
  assert(run_migration(target_runtime,snapshot))
  if not healthcheck() then rollback_runtime(previous_runtime,snapshot) end
end
reproduce_case()
Вопрос 28 из 30
Какой контракт отличит эквивалентный рефакторинг от тихой поломки? Выберите гарантию, определяющую раздел «Восстановление системы».
LuaLua · Восстановление системы · разбор 3
do
  local snapshot=export_data({numbers="decimal_strings",version=2})
  assert(run_migration(target_runtime,snapshot))
  if not healthcheck() then rollback_runtime(previous_runtime,snapshot) end
end
Вопрос 29 из 30
Для раздела «Восстановление системы» выбирают между коротким трюком и ясным контрактом. Что предпочтительнее? Ответ должен выражать проверяемое следствие раздела «Восстановление системы».
Вопрос 30 из 30
Что помогает не переносить в раздел «Восстановление системы» привычки из другого языка или среды? Ответ должен охватывать весь раздел «Восстановление системы».

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу