103 lines
4.2 KiB
Python
103 lines
4.2 KiB
Python
"""Test script for array column specifier fix."""
|
|
|
|
from app.services.converter import Converter
|
|
|
|
|
|
def test_array_specifier_fix():
|
|
"""Test that array column specifiers with spaces are fixed."""
|
|
|
|
converter = Converter()
|
|
|
|
# The problematic LaTeX from the error
|
|
latex_formula = r"""\begin{array}{l} D = \left| \begin{array}{c c c c} a _ {1 1} & a _ {1 2} & \dots & a _ {1 n} \\ \vdots & \vdots & & \vdots \\ a _ {i 1} + 0 + \dots + 0 & 0 + a _ {i 2} + \dots + 0 & \dots & 0 + \dots + 0 + a _ {i n} \\ \vdots & \vdots & & \vdots \\ a _ {n 1} & a _ {n 2} & \dots & a _ {n n} \end{array} \right| \\ = \left| \begin{array}{c c c c} a _ {1 1} & a _ {1 2} & \dots & a _ {1 n} \\ \vdots & \vdots & & \vdots \\ a _ {i 1} & 0 & \dots & 0 \\ \vdots & \vdots & & \vdots \\ a _ {n 1} & a _ {n 2} & \dots & a _ {n n} \end{array} \right| + \left| \begin{array}{c c c c} a _ {1 1} & a _ {1 2} & \dots & a _ {1 n} \\ \vdots & \vdots & & \vdots \\ 0 & a _ {i 2} & \dots & 0 \\ \vdots & \vdots & & \vdots \\ a _ {n 1} & a _ {n 2} & \dots & a _ {n n} \end{array} \right| \\ + \dots + \left| \begin{array}{c c c c} a _ {1 1} & a _ {1 2} & \dots & a _ {1 n} \\ \vdots & \vdots & & \vdots \\ 0 & 0 & \dots & a _ {i n} \\ \vdots & \vdots & & \vdots \\ a _ {n 1} & a _ {n 2} & \dots & a _ {n n} \end{array} \right|, \\ \end{array}"""
|
|
|
|
print("Testing array column specifier fix")
|
|
print("=" * 80)
|
|
print(f"\nOriginal LaTeX (first 200 chars):\n{latex_formula[:200]}...")
|
|
|
|
# Test preprocessing
|
|
print("\n" + "-" * 80)
|
|
print("Step 1: Preprocessing")
|
|
preprocessed = converter._preprocess_formula_for_omml(latex_formula)
|
|
|
|
# Check if spaces were removed from array specifiers
|
|
if "{c c c c}" in preprocessed:
|
|
print("✗ FAILED: Spaces not removed from array specifiers")
|
|
print(f"Found: {preprocessed[preprocessed.find('{c c c c}'):preprocessed.find('{c c c c}')+10]}")
|
|
elif "{cccc}" in preprocessed:
|
|
print("✓ SUCCESS: Spaces removed from array specifiers")
|
|
print(f"Changed '{{{\"c c c c\"}}}' → '{{cccc}}'")
|
|
else:
|
|
print("? Could not find array specifier in preprocessed output")
|
|
|
|
# Test OMML conversion
|
|
print("\n" + "-" * 80)
|
|
print("Step 2: OMML Conversion")
|
|
try:
|
|
omml = converter.convert_to_omml(latex_formula)
|
|
print(f"✓ SUCCESS: OMML conversion completed")
|
|
print(f"OMML length: {len(omml)} characters")
|
|
print(f"OMML preview (first 300 chars):\n{omml[:300]}...")
|
|
|
|
# Check if it contains oMath element
|
|
if "oMath" in omml:
|
|
print("\n✓ Valid OMML: Contains oMath element")
|
|
else:
|
|
print("\n✗ WARNING: OMML might be incomplete (no oMath element found)")
|
|
|
|
except Exception as e:
|
|
print(f"✗ FAILED: OMML conversion error")
|
|
print(f"Error: {e}")
|
|
return False
|
|
|
|
print("\n" + "=" * 80)
|
|
print("✓ All tests passed!")
|
|
return True
|
|
|
|
|
|
def test_simple_array():
|
|
"""Test with a simpler array example."""
|
|
|
|
converter = Converter()
|
|
|
|
print("\nTesting simple array")
|
|
print("=" * 80)
|
|
|
|
# Simple array with spaces in column specifier
|
|
latex_formula = r"\begin{array}{c c c} a & b & c \\ d & e & f \end{array}"
|
|
|
|
print(f"LaTeX: {latex_formula}")
|
|
|
|
try:
|
|
omml = converter.convert_to_omml(latex_formula)
|
|
print(f"✓ SUCCESS: Converted to OMML ({len(omml)} chars)")
|
|
print(f"Preview: {omml[:200]}...")
|
|
return True
|
|
except Exception as e:
|
|
print(f"✗ FAILED: {e}")
|
|
return False
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print("Array Column Specifier Fix Test Suite\n")
|
|
|
|
try:
|
|
test1 = test_simple_array()
|
|
test2 = test_array_specifier_fix()
|
|
|
|
if test1 and test2:
|
|
print("\n" + "=" * 80)
|
|
print("✓✓✓ ALL TESTS PASSED ✓✓✓")
|
|
print("=" * 80)
|
|
else:
|
|
print("\n" + "=" * 80)
|
|
print("✗✗✗ SOME TESTS FAILED ✗✗✗")
|
|
print("=" * 80)
|
|
|
|
except KeyboardInterrupt:
|
|
print("\n\nTests interrupted by user")
|
|
except Exception as e:
|
|
print(f"\n\nTest suite error: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|