Test both layers: parsing/validation and semantics. Use golden tests and property tests where invariants matter.
If you create a DSL, you are responsible for its correctness. Tests are the only thing that keeps the DSL from becoming a fragile “language inside the language.”
This section focuses on a practical test approach: unit tests for parsing/validation, semantic tests for evaluation, and “golden” examples that document how the DSL should behave in realistic scenarios.