mdview2: целевые тестовые файлы путей обрыва (testfiles/) на диск
testfiles/gen_testfiles.py генерирует: BIG.MD — ~170 КБ прозы (CP866), успешный рендер большого файла TABLES.MD — неровные таблицы, пробивает кап контент-кэша (Content cache exhausted) LINES.MD — ~22000 коротких строк, пробивает лимит 18432 (Line limit reached) floppy кладёт на диск TABLES.MD + LINES.MD (ASCII, напрямую из testfiles/) вместо BIG.MD. ВРЕМЕННО для проверки лимита 256 КБ. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Генератор тестовых файлов mdview2 для проверки лимита 256 КБ и путей обрыва.
|
||||
|
||||
Результат кладётся рядом со скриптом (examples/mdview2/testfiles/):
|
||||
BIG.MD — ~216 КБ обычной прозы (CP866): успешный рендер большого файла.
|
||||
TABLES.MD — таблично-тяжёлый (ASCII): пробивает кап контент-кэша (40 стр./набор),
|
||||
т.к. неровные таблицы (короткие ячейки + один широкий столбец)
|
||||
раздувают число (символ,атрибут)-ячеек кратно относительно источника.
|
||||
LINES.MD — ~22000 коротких строк (ASCII): пробивает лимит строк (18432).
|
||||
|
||||
Запуск: python3 gen_testfiles.py
|
||||
"""
|
||||
import os
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
ROOT = os.path.dirname(HERE)
|
||||
|
||||
|
||||
def write(name, data):
|
||||
path = os.path.join(HERE, name)
|
||||
mode = 'wb' if isinstance(data, (bytes, bytearray)) else 'w'
|
||||
with open(path, mode) as f:
|
||||
f.write(data)
|
||||
print(f"{name}: {os.path.getsize(path)} bytes")
|
||||
|
||||
|
||||
# --- BIG.MD: склейка README + READMEBG ×2, перекодировано в CP866 -----------
|
||||
big = bytearray()
|
||||
for _ in range(2):
|
||||
for fn in ('README.MD', 'READMEBG.MD'):
|
||||
with open(os.path.join(ROOT, fn), encoding='utf-8') as f:
|
||||
big += f.read().encode('cp866', errors='replace')
|
||||
write('BIG.MD', bytes(big))
|
||||
|
||||
# --- TABLES.MD: неровные таблицы -> исчерпание контент-кэша ------------------
|
||||
# Один широкий столбец (72 симв.) на таблицу задаёт ширину; остальные ячейки
|
||||
# короткие, но при рендере добиваются до этой ширины -> ~80 ячеек/строка из
|
||||
# ~8 байт источника. ~300 таблиц × 30 строк дают ~840K ячеек (1.68 МБ контента)
|
||||
# при ~108 КБ источника -> кап 640 КБ/набор пробивается, строк (~11K) < 18432,
|
||||
# значит первой срабатывает причина TRUNC_CONTENT.
|
||||
NT, ROWS = 300, 30
|
||||
wide = 'x' * 72
|
||||
out = ['# Tables test - content cache exhaustion trigger', '']
|
||||
for t in range(NT):
|
||||
out.append(f'## Table {t + 1}')
|
||||
out.append('| Column A | B |')
|
||||
out.append('|---|---|')
|
||||
out.append(f'| {wide} | y |')
|
||||
for r in range(ROWS):
|
||||
out.append(f'| a{r} | b |')
|
||||
out.append('')
|
||||
write('TABLES.MD', '\n'.join(out) + '\n')
|
||||
|
||||
# --- LINES.MD: масса коротких строк -> исчерпание лимита строк ---------------
|
||||
# 22000 коротких непустых строк = 22000 экранных сегментов > 18432; контент
|
||||
# мал (~9 ячеек/строка), поэтому первой срабатывает причина TRUNC_LINES.
|
||||
N = 22000
|
||||
out = ['# Short lines test - line limit trigger', '']
|
||||
out += [f'row {i:05d}' for i in range(1, N + 1)]
|
||||
write('LINES.MD', '\n'.join(out) + '\n')
|
||||
Reference in New Issue
Block a user