Remove stale Float constants and add a constant drift test#2994
Open
zonuexe wants to merge 3 commits into
Open
Remove stale Float constants and add a constant drift test#2994zonuexe wants to merge 3 commits into
zonuexe wants to merge 3 commits into
Conversation
Compares Module#constants(false) against the constants declared in the loaded RBS environment for a curated set of platform/build-invariant core classes (Float, Integer, String, ...), failing on either: * stale - declared in RBS but no longer defined at runtime, or * missing - defined at runtime but absent from the RBS signature. Classes whose constant set varies by OS or build options (Process, Socket, Errno, ...) are intentionally excluded, with a SKIP map for per-constant exceptions.
Both are declared in core/float.rbs but raise NameError at runtime: * Float::ROUNDS was removed from Ruby in 3.0 (ruby/ruby#2953). * Float::Infinity was added in ruby#1095 (which superseded ruby#1080). Ruby does not define this constant: looking at the Ruby of that period (3.1), numeric.c defines Float::INFINITY but not Float::Infinity, and it still raises NameError today. Also add singleton constant type assertions for the remaining Float constants, so their declared types stay verified against the runtime.
Integer::GMP_VERSION is defined only when Ruby is built with GMP (USE_GMP), so it is present on the Linux CI build but absent on macOS. Add it to the SKIP map so the gate stays green across platforms.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Removes two
Floatconstants that are declared incore/float.rbsbut raiseNameErrorat runtime, and adds a test guarding against this kind of drift for platform-invariant core classes.Removed constants
Float::ROUNDS— removed from Ruby in 3.0 (Remove Float::ROUNDS ruby#2953); accessing it raisesNameError.Float::Infinity— added in Add Float::Infinity #1095 (which superseded added type of Float::INFINITY #1080). Ruby does not define this constant: looking at the Ruby of that period (3.1),numeric.cdefinesFloat::INFINITYbut notFloat::Infinity, and it still raisesNameErrortoday.Constant drift test
test/stdlib/constant_drift_test.rbcomparesModule#constants(false)against the constants declared in the loaded RBS environment, for a curated set of platform/build-invariant core classes (Float,Integer,String, …). It fails in either direction:Classes whose constant set varies by OS or build options (
Process,Socket,Errno, …) are intentionally excluded, with aSKIPmap for per-constant exceptions. Singleton constant type assertions for the remainingFloatconstants are added as well.