Commit graph

17 commits

Author SHA1 Message Date
c1791ddc20 feat: add nan to types, add hasnan and sign functions
All checks were successful
/ test (pull_request) Successful in 19s
Also makes certain to clean up the dependencies that are being
  generated even in case of throwing an error in the factory for
  a method.
2025-04-15 20:33:13 -07:00
686cd93927 feat: more utility functions
All checks were successful
/ test (pull_request) Successful in 17s
Adds type constants zero and one, and allows you to obtain them
   directly from a type object. This facility creates a behavior
   with a parametric type: the type of `math.zero(T)` where `T` is a
   Type object (i.e., has type `TypeOfTypes`) depends not just on that
   type TypeOfTypes, but instead on the _value_ of the argument `T`. Since
   nanomath is not (yet?) equipped to handle typing such a method, we just
   set its return type to a new constant NotAType that (hopefully) does not
   work with the rest of the type system. Also allows you to compute `zero`
   and `one` from an example value, rather than from the type object itself.

   Adds utility function `isZero` to test if a value is zero.

   As usual so far, the additions uncovered some remaining bugs, which
   this PR fixes. For example, there was a problem in that resolution of
   the `one` method was failing because the `Any` pattern was blocking
   matching of the `TypeOfTypes` pattern. Although we may eventually need to
   sort the patterns for a given method to maintain a reasonable matching
   order, for now the solution was just to move the two patterns into the
   same source file and explicitly order them. (With the way onType and
   Implementations are currently implemented, the proper ordering is more
   general to more specific, i.e. later implementations supersede earlier
   ones.

   Adds many new tests, as always.
2025-04-15 16:23:55 -07:00
d3f2bc09b7 feat: config and approximate equality
All checks were successful
/ test (pull_request) Successful in 17s
Establishes a global config object for a TypeDispatcher instance, so far
  with just properties representing comparison tolerances. Begins a
  "relational" group of functions with basic approximate equality, and
  an initial primitive ordering comparison. Ensures that methods that
  depend on properties of `config` will be properly updated when those
  properties change.
2025-04-15 01:17:27 -07:00
27fa4b0193 feat: Introduce BooleanT and boolean functions (#17)
All checks were successful
/ test (push) Successful in 17s
This PR adds a boolean section, as well as an isNaN predicate on numbers. In a TypeDispatcher, when BooleanT is present, isNaN returns a BooleanT. However, in a numbers-only TypeDispatcher, it returns 1 or 0 instead. Moreover, when booleans are subsequently added to a numbers-only instance, isNaN properly reconfigures itself to return BooleanT.

No predicates that depend on approximate equality testing or a configuration object are implemented in this PR.

This PR also implements type matching and dispatching with implicit conversions, and adds an implicit conversion from BooleanT to NumberT.

Reviewed-on: #17
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-committed-by: Glen Whitney <glen@studioinfinity.org>
2025-04-13 16:29:51 +00:00
14011984a0 chore: fix wrong use-node-version (#16)
All checks were successful
/ test (push) Successful in 16s
Reviewed-on: #16
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
Co-committed-by: Jos de Jong <wjosdejong@gmail.com>
2025-04-10 18:25:40 +00:00
de870f2adc chore: enforce using Node.js 22, fixing #13, ignore IDE files (#15)
All checks were successful
/ test (push) Successful in 10s
Reviewed-on: #15
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
Co-committed-by: Jos de Jong <wjosdejong@gmail.com>
2025-04-10 18:16:38 +00:00
2f9071af1b doc: Fix git URL in README (#11)
All checks were successful
/ test (push) Successful in 11s
Reviewed-on: #11
Co-authored-by: glen <glen@studioinfinity.org>
Co-committed-by: glen <glen@studioinfinity.org>
2025-04-08 23:29:58 +00:00
05ff078529 feat: add a first generic method, square (#10)
All checks were successful
/ test (push) Successful in 10s
Resolves #2.

Reviewed-on: #10
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-committed-by: Glen Whitney <glen@studioinfinity.org>
2025-04-08 23:25:01 +00:00
1a6890f458 test: Add tests for all existing functionality, correcting issues (#9)
All checks were successful
/ test (push) Successful in 11s
Resolves #8.

Reviewed-on: #9
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-committed-by: Glen Whitney <glen@studioinfinity.org>
2025-04-08 22:42:53 +00:00
64f99c0f2d test: Run pnpm test in CI on all PRs and pushes to main (#7)
All checks were successful
/ test (push) Successful in 10s
Resolves #6.

Reviewed-on: #7
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-committed-by: Glen Whitney <glen@studioinfinity.org>
2025-04-08 02:38:28 +00:00
036def4a0c test: Set up a mocha test harness (#5)
We use [mocha](https://mochajs.org/) as the test framework, as it is
  the tool used by mathjs and we would like to make tests as similar
  as possible. However, to tighten the linkage between source code and
  tests, we adopt a somewhat different file organization: unit tests
  for a given source file `blah/foo.js` are in `blah/__test__/foo.spec.js`.

  To run all unit tests, execute the script `pnpm test`.

  Resolves #3.

Reviewed-on: glen/nanomath#5
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-committed-by: Glen Whitney <glen@studioinfinity.org>
2025-04-07 16:18:46 +00:00
79c6d44fda feat: First working TypeDispatcher, supporting plain functions on Number (#4)
Resolves #1.

A hand test showed this code can add two plus two, always a major milestone. So we will skip review on this PR since there is currently no testing framework, and proceed immediately to addressing #3.

Reviewed-on: glen/nanomath#4
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-committed-by: Glen Whitney <glen@studioinfinity.org>
2025-04-07 05:11:50 +00:00
69ef928b6e refactor: Switch to 'map-like object keyed by string and type vector' format
See https://code.studioinfinity.org/glen/nanomath/wiki/Item-Specifications.
  Also stubs out the TypeDispatcher, mocking the merge function, so we
  can see that all of the proper things will be added.

  Ready for initial implementation of the TypeDispatcher.
2025-04-02 11:22:53 -07:00
040ec377a1 feat: add type definition and other function categories for number 2025-03-30 20:00:07 -07:00
183a894868 feat: add arithmetic functions for number 2025-03-29 17:12:35 -07:00
fea0d3ac91 doc: Initialize pnpm and flesh out README 2025-03-29 16:39:29 -07:00
ab3c620cb9 Initial commit 2025-03-29 16:57:23 +00:00