| """AIFlow Math Ink 0.5μ λͺ¨λΈ λ
립μ κ·Έλ¦¬λ© κ³μ½μ κ²μ¦νλ€.""" |
|
|
| from PIL import Image |
|
|
| from aiflow_math_ink_05 import ( |
| GridConfig, |
| Stroke, |
| build_formula_grids, |
| parse_writing_events, |
| render_grid_images, |
| ) |
|
|
|
|
| def test_fraction_bar_joins_numerator_and_denominator() -> None: |
| """νμ λ³μ: λΆμΒ·λΆμμ Β·λΆλͺ¨ ν. μλ μ리: ꡬ쑰μ μ΄ μΈ νμ ν μ
λ‘ λ¬Άλμ§ κ²μ¦νλ€.""" |
| strokes = [ |
| Stroke(0, ((24, 20), (36, 20))), |
| Stroke(1, ((10, 42), (60, 42))), |
| Stroke(2, ((24, 64), (36, 64))), |
| ] |
|
|
| grids = build_formula_grids(strokes) |
|
|
| assert len(grids) == 1 |
| assert grids[0].stroke_ids == (0, 1, 2) |
|
|
|
|
| def test_distant_rows_remain_separate() -> None: |
| """νμ λ³μ: λ©λ¦¬ λ¨μ΄μ§ λ ν. μλ μ리: ν μ¬μ΄ μ°κ²° μ‘°κ±΄μ΄ μμΌλ©΄ λ μ
μ μ μ§νλ€.""" |
| strokes = [ |
| Stroke(0, ((10, 20), (40, 20))), |
| Stroke(1, ((10, 180), (40, 180))), |
| ] |
|
|
| grids = build_formula_grids(strokes) |
|
|
| assert len(grids) == 2 |
|
|
|
|
| def test_parser_enforces_total_point_cap() -> None: |
| """νμ λ³μ: μμ μ μνκ³Ό λ ν payload. μλ μ리: μνμ λλ νμ λ°μ§ μλμ§ κ²μ¦νλ€.""" |
| payload = [ |
| {"stroke_id": 0, "points": [{"x": 0, "y": 0}, {"x": 1, "y": 1}]}, |
| {"stroke_id": 1, "points": [{"x": 2, "y": 2}, {"x": 3, "y": 3}]}, |
| ] |
|
|
| strokes = parse_writing_events(payload, GridConfig(max_total_points=2)) |
|
|
| assert [stroke.stroke_id for stroke in strokes] == [0] |
|
|
|
|
| def test_renderer_returns_one_rgb_image_per_grid() -> None: |
| """νμ λ³μ: μΊλ²μ€Β·λ ν. μλ μ리: κ° μ
μ λμνλ RGB μ΄λ―Έμ§κ° μμ±λλμ§ κ²μ¦νλ€.""" |
| strokes = [ |
| Stroke(0, ((10, 20), (40, 20))), |
| Stroke(1, ((10, 180), (40, 180))), |
| ] |
| grids = build_formula_grids(strokes) |
|
|
| images = render_grid_images(Image.new("RGB", (100, 220), "white"), strokes, grids) |
|
|
| assert len(images) == len(grids) == 2 |
| assert all(image.mode == "RGB" for image in images) |
|
|
|
|