This PR introduces several new integer conversion functions to the Stable API, enhancing the capabilities of the rb-sys crate for handling Ruby integer types.
Changes
Added the following functions to the StableApiDefinition trait:
int2fix: Converts a C int to a Ruby Fixnum
int2num: Converts a C int to a Ruby Integer (Fixnum or Bignum)
fix2long: Converts a Ruby Fixnum to a C long
num2long: Converts a Ruby Integer (Fixnum or Bignum) to a C long
Implemented these functions in both the pure Rust and compiled C versions of the Stable API.
Added corresponding macros in macros.rs:
INT2FIX
INT2NUM
FIX2LONG
NUM2LONG
Impact
These additions will allow Rust developers using rb-sys to more easily work with Ruby's integer types, providing a safer and more idiomatic way to convert between Rust and Ruby number representations.
Testing
The PR includes extensive parity tests to ensure that the new functions behave identically to their Ruby counterparts across a wide range of input values, including edge cases like maximum and minimum Fixnum values.
This PR introduces several new integer conversion functions to the Stable API, enhancing the capabilities of the
rb-sys
crate for handling Ruby integer types.Changes
Added the following functions to the
StableApiDefinition
trait:int2fix
: Converts a C int to a Ruby Fixnumint2num
: Converts a C int to a Ruby Integer (Fixnum or Bignum)fix2long
: Converts a Ruby Fixnum to a C longnum2long
: Converts a Ruby Integer (Fixnum or Bignum) to a C longImplemented these functions in both the pure Rust and compiled C versions of the Stable API.
Added corresponding macros in
macros.rs
:INT2FIX
INT2NUM
FIX2LONG
NUM2LONG
Impact
These additions will allow Rust developers using
rb-sys
to more easily work with Ruby's integer types, providing a safer and more idiomatic way to convert between Rust and Ruby number representations.Testing
The PR includes extensive parity tests to ensure that the new functions behave identically to their Ruby counterparts across a wide range of input values, including edge cases like maximum and minimum Fixnum values.