Inspired by https://github.com/josdejong/mathjs/discussions/2212 and
https://github.com/josdejong/mathjs/issues/2585.
Provides a simple adapter function `adapted` which takes a class
implementing an arithmetical datatype and returns a PocomathInstance
with a new type for that class, invoking the methods of the class
in a standard way for the Pocomath/mathjs operations. (That instance
can then be installed in another to add the new type to any instance
you like, including the default one.)
Uses this facility to bring fraction.js Fraction into Pocomath, and
tests the resulting type.
Currently the "standard" interface for an arithmetical type is heavily modeled
after the design of fraction.js, but with experience with other 3rd-party types
it could be streamlined to something pretty generic (and the Fraction
adaptation could be patched to conform to the resulting "standard"). Or a
proposal along the lines of https://github.com/josdejong/mathjs/discussions/2212
could be adopted, and a shim could be added to fraction.js to conform to
**that** standard.
Resolves#30.
Includes a full implementation of a type-homogeneous Tuple type, using the template types
feature, as a demonstration/check of its operation.
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Reviewed-on: #45
Also adds a `mean()` operation so there will be at least one operation
that takes only a rest parameter, to exercise the ban on splitting
such a parameter between the stored value and new arguments.
Adds various tests of chains.
Resolves#32.
Relational functions are added using templates, and existing generic functions are made more strict with them. Also a new built-in typeOf function is added, that automatically updates itself.
Resolves#34.
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Reviewed-on: #41
This should eventually be moved into typed-function itself, but for
now it can be implemented on top of the existing typed-function.
Uses subtypes to define (and error-check) gcd and lcm, which are only
defined for integer arguments.
Resolves#36.
This allows types to be collected; prior to this commit they
were conflicting from different modules.
Uses this fix to extend sqrt to bigint, with the convention
that it is undefined for non-perfect squares when 'predictable'
is false and is the "best" approximation to the square root when
'predictable' is true. Furthermore, for negative bigints, you might
get a Gaussian integer when predictable is false; or you will just get
your argument back when 'predictable' is true because what other
bigint could you give back for a negative bigint?
Also had to modify tests on the sign in sqrt(Complex) and add functions
'zero' and 'one' to get types to match, as expected in #27.
Adds numerous tests.
Resolves#26.
Resolves#27.
Also implements a config object that upon change, lazily invalidates
all operations that access it.
Also allows references to signatures with nonexistent types (which
typed-function does not); they come back as undefined.
Uses these features to implement sqrt for number and complex.
Resolves#7.