about summary refs log tree commit diff
path: root/users/sterni/nix/fun/tests (follow)
AgeCommit message (Collapse)AuthorFilesLines
2022-02-15 r/3834 feat(sterni/nix/fun): implement tail call “optimization” for Nixsterni1-0/+53
I've had the notion that builtins.genericClosure can be used to express any recursive algorithm, but a proof is much better than a notion of course! In this case we can easily show this by implementing a function that converts a tail recursive function into an application of builtins.genericClosure. This is possible if the function resolves its self reference using a fixed point which allows us to pass a function that encodes the call to self in a returned attribute set, leaving the actual call to genericClosure's operator. Additionally, some tools for collecting meta data about functions (argCount) and calling arbitrary functions (apply, unapply) are necessary. Change-Id: I7d455db66d0a55e8639856ccc207639d371a5eb8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5292 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Autosubmit: sterni <sternenseemann@systemli.org>
2022-01-31 r/3723 style: format entire depot with nixpkgs-fmtVincent Ambo1-3/+3
This CL can be used to compare the style of nixpkgs-fmt against other formatters (nixpkgs, alejandra). Change-Id: I87c6abff6bcb546b02ead15ad0405f81e01b6d9e Reviewed-on: https://cl.tvl.fyi/c/depot/+/4397 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: lukegb <lukegb@tvl.fyi> Reviewed-by: wpcarro <wpcarro@gmail.com> Reviewed-by: Profpatsch <mail@profpatsch.de> Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: cynthia <cynthia@tvl.fyi> Reviewed-by: edef <edef@edef.eu> Reviewed-by: eta <tvl@eta.st> Reviewed-by: grfn <grfn@gws.fyi>
2021-04-12 r/2495 feat(sterni/nix/fun): add hasEllipsissterni1-0/+29
As a complementation to builtins.functionArgs this function checks if the function has a set pattern that contains an ellipsis (i. e. `{ [arg, [ arg1, [ … ]]] ... }:`). The implementation of this is pretty cursed however since there is no clean way to do this in vanilla nix: We need to match on the output of builtins.toXML which does try to serialize functions by outputting their argument and information about it (whether it is a normal argument or a attribute set pattern, in the latter case it also serialize every component of the pattern). Change-Id: I0f33721811a3180cec205a0c98e6d92e10e92075 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2950 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>