-
Couldn't load subscription status.
- Fork 1
Handle missing native exports when running tests #9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Handle missing native exports when running tests #9
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR enhances test robustness by improving the native library validation and adding deterministic behavior to the stubbed text generator. When native binaries are missing required exports (e.g., due to outdated shims), tests will skip gracefully with clear messages rather than failing cryptically.
Key Changes:
- Added export validation to detect missing native entry points before running tests
- Implemented arithmetic expression evaluation in the stubbed text generator for deterministic test output
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| src/MLXSharp.Tests/ArraySmokeTests.cs | Added HasRequiredExports method to validate native library exports before test execution |
| native/src/mlxsharp.cpp | Added try_evaluate_math_expression function to detect and evaluate simple arithmetic expressions in test prompts |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| value = lhs * rhs; | ||
| break; | ||
| case '/': | ||
| if (std::abs(rhs) < std::numeric_limits<double>::epsilon()) |
Copilot
AI
Oct 25, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using epsilon() for division-by-zero check is incorrect. epsilon() represents the smallest representable difference between 1.0 and the next representable value (typically ~2.22e-16), not a threshold for zero. A value like 1e-10 could pass this check but still cause overflow. Use an explicit zero comparison or a more appropriate threshold like 1e-10.
| if (std::abs(rhs) < std::numeric_limits<double>::epsilon()) | |
| if (std::abs(rhs) < 1e-10) |
| std::string output; | ||
| if (auto math = try_evaluate_math_expression(input)) { | ||
| output = *math; | ||
| } else { |
Copilot
AI
Oct 25, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[nitpick] The output variable declaration should remain at line 497 where it was originally, or the else-block code should be refactored into a separate function. Moving the declaration here creates a wider scope than necessary and makes the control flow less clear, as output is only populated in one of two branches before being used at line 510.
Summary
Testing
lapack.hheader not present in container image)https://chatgpt.com/codex/tasks/task_e_68fc9f13b5b4832685fca3d771f143dd