gn / lua-nucleo forked from lua-nucleo/lua-nucleo
- Source
- Commits
- Network (4)
- Issues (19)
- Downloads (0)
- Wiki (1)
- Graphs
-
Branch:
master
Pledgie Donations
Once activated, we'll place the following badge in your repository's detail box:
A random collection of core and utility level Lua libraries
-
Реализовать функцию, возвращающую визуализацию луашных данных аналогично
tstr, но в многострочном виде с отступами согласно уровню вложенности таблиц.tpretty(t : table, indent : string, cols : number) : stringОптимизировать по скорости и занимаемой памяти. Критерий - вычислительная сложность такого же порядка, что и у
tstr. Рекурсию и невизуализуемые данные обрабатывать аналогичноtstr.
Формат выходных данныхtpretty:
Конструктор исходной таблицы (типы поддерживаются так же, как и вtstr), соблюдающий Lua Coding Guidelines:
1. Если таблица создаётся на одной строке, её элементы отделяются запятыми.
2. Если таблица создаётся на нескольких строках, её элементы отделяются точками с запятой, и располагаются по одному элементу на строке.
3. Нельзя смешивать запятые и точки с запятой в одном списке. Исключение: допускается расположение array part таблицы с неявными ключами в строку и hash part — в столбик. При этом таблица оформляется так:{ "a", "b", "c"; d = e; }- Если список разделён запятыми, в конце списка "висящая" запятая не ставятся.
- Если список разделён точками с запятой, в конце списка также ставится точка с запятой.
Со следующими уточнениями:
- Если таблица плоская( без подтаблиц ) И её можно представить в виде строки шириной не более cols, сериализуем линейно.
- ИНАЧЕ, сериализуем многострочно с отступами, базовый элемент отступа задается строкой indent(напр,
indent = " "). А ИМЕННО:
если пара ключ-значение не содержит вложенных подтаблиц(то есть и ключ и значение есть простой тип либо плоская таблица) и полностью помещается в cols c учетом отступа, сериализуем линейно. ИНАЧЕ, сериализуем в виде(например):
[{ {1, 2, 3} }] = { {4, 5, 6} }Примеры(везде indent равен двум пробелам):
cols = 100
{ 1, 2, 3, [true] = 7}Та же таблица, cols = 2
{ 1; 2; 3; [true] = 7; }cols = 100
{ {1, 2, 3}; [{}] = {["and"] = "or"}; [{ {1}; }] = { {2}; }; [{ {1, 2}; {3, 4}; }] = 1; }Дополнительные положения:
- Код должен соответствовать гайдлайнам.
- Тесты должны обеспечивать удовлетворительное покрытие реализации (сравнимое с tstr). Можно обобщить часть тестов tstr.
- Добавить сравнение по скорости с tstr (бенчмарк).
Comments
- Если список разделён запятыми, в конце списка "висящая" запятая не ставятся.
-
Реализовать функцию сравнения значений, возвращающую
trueесли значения одинаковые иfalse, читаемая разницаесли разные.tdiff(actual:*, expected:*) : boolean, stringСкорость не очень важна — главное читаемость результатов. Функция будет в первую очередь использоваться в тестах
Если типы разные, просто сказать об этом.
type mismatch actual: <typename> expected: <typename>Если даны две разные строки, показать "окно" в N символов, в котором есть первое различие:
string mismatch (Nth char different) actual (len N): "abcdef" expected (len M): "abcDef"Если даны две таблицы, выдать разницу в виде минимального поддерева. Выдать все отличающиеся элементы. Равенство таблиц — в смысле tdeepequals. Конкретный текст, получающийся на выходе, желательно улучшить.
tdiff({ a = 42, b = {} }, { 3, a = 42, b = 7 }) table mismatch: [1]: only in expected ["b"]: type mismatch: actual: table expected: number
Comments
-
Реализовать функцию-аналог tserialize для сериализации данных в многострочном виде (аналогично
tprettyдляtstr/см. ранее/).tserialize_multiline(...) : stringОптимизировать по скорости и памяти (но не очень критично, поскольку будет применяться в основном для сохранения конфигов). Рекурсию обрабатывать аналогично
tserialize.
Comments
-
Простейший пример
-- A.lua: import("B.lua") -- B.lua: import("A.lua")Хотя бы правильно падать (без бесконечного цикла). Если A.lua уже есть в кеше в момент включения, падать не нужно, но использовать кешированные данные.
Comments
-
Экспортировать из tdeepequals.lua функцию tless (с тестами)
Comments
-
Написать тесты для ensure_equals().
Comments
-
Функция, которая знает про ограничение в 2^18 констант на чанк.
http://lua-users.org/lists/lua-l/2008-02/msg00298.html
Если вдруг можно задёшево объединить её с tserialize -- лучше объединить (и не делать отдельную функцию).
Если будет возможность сохранить старый формат для "коротких" данных -- лучше его сохранить.
Comments
-
Git pre-commit hook, проверяющий код на соответствие гайдлайнам.
0 comments Created 3 months ago by gnХотелось бы...
Comments
-
При помощи, например, luacov: http://luacov.luaforge.net/
Желательно встроить опцией в test.sh (плюс доп. скрипт, как сделано со strict-test.sh).
Comments
-
Последний этап перед тем, как показать Фабьену
- Завести форк metalua на github'е
- Создать в нём новую ветку
- Выгрызть из lua-nucleo tserialize (tserialize.lua, language.lua, import.lua с закомментированным if declare в начале), и воткнуть его в новую ветку metalua вместо нативного serialize.
- Померить time'ом (по три раза, взять средний результат) время работы на старой ветке и на новой. Записать результаты в файлик и закоммитить.
Comments
- Завести форк metalua на github'е
-
Написать проверялку отклонения апостериорной вероятности от априорной
0 comments Created 2 months ago by agladyshДля равномерного распределения (
math.random)Интерфейс (сейчас в pk/engine:test/lib/random.lua; перенести в lua-nucleo/random.lua; убрать падения, возвращать res, err):
local validate_aposteriori_probability = function( num_attempts, -- > 0 apriori_probs, -- { a = 0.5, b = 0.25, c = 0.25 }, normalized, greater-than-zero aposteriori_probs, -- { a = 1/3, b = 1/3, c = 1/3 }, keys are exact match for apriori confidence_level -- see below )confidence_level -- Уровень доверительности. Тест, использующий check_stats() считается успешным, если доля успешных запусков на наших данных не меньше confidence_level.
Написать адекватные тесты.
Comments
-
Проверить, что данные с nan, +inf, -inf нормально поднимаются обратно после сериализации tserialize. Если нет, сохранять 0/0, 1/0 и -1/0 соответственно.
В tstr -- не нужно.
Comments
-
1 comment Created about 1 month ago by agladyshtdeepequalsxtdeepequals vs. nanurgentx -
0 comments Created about 1 month ago by agladyshtserialize: minor guidelines fixtserializexhttp://github.com/lua-nucleo/lua-nucleo/blob/master/lua-nucleo/tserialize.lua#L324-333
Здеcь не нужен table.concat. Он не имеет смысла когда можно записать конкатенацию в однин вызов.
Лучше:
return "do local _={".. table_concat(prevbuf, " ").. '}'.. table_concat(buf, " ", 1, nadd).. " return ".. table_concat(buf, ",", nadd+1).. " end"Comments
-
Реализовать аналог tserialize для дампа в формат graphviz
0 comments Created about 1 month ago by agladyshСабж
Comments
-
Реализовать функцию клонирования таблиц с учётом "циклов" (в понимании tserialize).
Comments
-
Предварительно вычистив устаревшие
Comments
-
Построить считалку метрики кода на Lua (какие-нибудь из, Function Points)
http://en.wikipedia.org/wiki/Function_point
(Но сначала основательно подумать.)
Comments





Опционально дать настраивать ширину отступов.