fix: resolve all stress test bugs

- Record equality: add Record case to values_equal in interpreter
- Invalid escapes: error on unknown escape sequences in lexer
- Unknown effects: validate effect names in check_function with suggestions
- Circular types: add DFS cycle detection in check_type_cycles
- Parser: require | for enum variants, enabling proper type alias syntax

All 265 tests pass.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-14 02:45:52 -05:00
parent 07a35f1829
commit c81349d82c
6 changed files with 224 additions and 27 deletions

View File

@@ -2810,6 +2810,11 @@ impl Interpreter {
(Value::Tuple(a), Value::Tuple(b)) => {
a.len() == b.len() && a.iter().zip(b).all(|(x, y)| self.values_equal(x, y))
}
(Value::Record(a), Value::Record(b)) => {
a.len() == b.len() && a.iter().all(|(k, v)| {
b.get(k).map(|bv| self.values_equal(v, bv)).unwrap_or(false)
})
}
(
Value::Constructor {
name: n1,
@@ -2824,6 +2829,7 @@ impl Interpreter {
&& f1.len() == f2.len()
&& f1.iter().zip(f2).all(|(x, y)| self.values_equal(x, y))
}
(Value::Json(a), Value::Json(b)) => a == b,
_ => false,
}
}