mirror of
https://github.com/carp-lang/Carp.git
synced 2024-09-11 05:25:28 +03:00
* core: add derive * fix: fix errors with set! Notably, don't type check dynamic bindings (which can be set to whatever) and eliminate a hang that resulted from not handling an error at the end of the `set!` call. Also refactors some of the code in efforts to make it a bit cleaner. Also adds an error when `set!` can't find the variable one calls set! on. * feat: better derive * test: add error test for derive * document derive * add derive to core documentation to generate * core: add derive * fix: fix errors with set! Notably, don't type check dynamic bindings (which can be set to whatever) and eliminate a hang that resulted from not handling an error at the end of the `set!` call. Also refactors some of the code in efforts to make it a bit cleaner. Also adds an error when `set!` can't find the variable one calls set! on. * feat: better derive * document derive * feat: first completely working version of derive * feat: make name of derivable customizable (thanks @scolsen) * refactor: implement doc edits provided by @scolsen * feat: change argument order for derive * fix: change deriver error test * test: add derive tests * fix: change order of derive back * docs: fix typo in derive document Co-authored-by: scottolsen <scg.olsen@gmail.com>
44 lines
952 B
Plaintext
44 lines
952 B
Plaintext
(make-update-deriver 'inc)
|
|
(make-update-deriver 'dec)
|
|
|
|
(deftype T [x Int y Int z Int])
|
|
(derive T inc)
|
|
(derive T dec)
|
|
(derive T zero)
|
|
(derive T str)
|
|
(derive T = eq)
|
|
|
|
(load "Test.carp")
|
|
(use Test)
|
|
|
|
(deftest test
|
|
(assert-true test
|
|
(= &(T.init 0 0 0) &(T.init 0 0 0))
|
|
"deriving = works I"
|
|
)
|
|
(assert-false test
|
|
(= &(T.init 0 0 0) &(T.init 1 0 0))
|
|
"deriving = works II"
|
|
)
|
|
(assert-equal test
|
|
&(T.init 0 0 0)
|
|
&(T.zero)
|
|
"deriving zero works"
|
|
)
|
|
(assert-equal test
|
|
&(T.init 2 3 4)
|
|
&(T.inc (T.init 1 2 3))
|
|
"deriving inc works"
|
|
)
|
|
(assert-equal test
|
|
&(T.init 0 1 2)
|
|
&(T.dec (T.init 1 2 3))
|
|
"deriving dec works"
|
|
)
|
|
(assert-equal test
|
|
"(T 0 0 0)"
|
|
&(T.str &(T.zero))
|
|
"deriving str works"
|
|
)
|
|
)
|