From f957a57ad8cd6a1dc3243a4373f15888b680d87f Mon Sep 17 00:00:00 2001 From: William Carroll Date: Sat, 30 Jul 2022 11:29:31 -0700 Subject: feat(wpcarro/emacs): Package math.el Another Elisp library that I wrote during my manic experience of switching to EXWM. Change-Id: I652f5c7228332a7f5822bd408a0c0be8f7bc4b4f Reviewed-on: https://cl.tvl.fyi/c/depot/+/6018 Tested-by: BuildkiteCI Reviewed-by: wpcarro Autosubmit: wpcarro --- users/wpcarro/emacs/pkgs/math/default.nix | 30 +++++++++++++++ users/wpcarro/emacs/pkgs/math/math.el | 63 +++++++++++++++++++++++++++++++ users/wpcarro/emacs/pkgs/math/tests.el | 25 ++++++++++++ 3 files changed, 118 insertions(+) create mode 100644 users/wpcarro/emacs/pkgs/math/default.nix create mode 100644 users/wpcarro/emacs/pkgs/math/math.el create mode 100644 users/wpcarro/emacs/pkgs/math/tests.el (limited to 'users/wpcarro/emacs/pkgs') diff --git a/users/wpcarro/emacs/pkgs/math/default.nix b/users/wpcarro/emacs/pkgs/math/default.nix new file mode 100644 index 000000000000..9167d61d4edc --- /dev/null +++ b/users/wpcarro/emacs/pkgs/math/default.nix @@ -0,0 +1,30 @@ +{ pkgs, depot, ... }: + +let + math = pkgs.callPackage + ({ emacsPackages }: + emacsPackages.trivialBuild { + pname = "math"; + version = "1.0.0"; + src = ./math.el; + packageRequires = + (with emacsPackages; [ + dash + ]) ++ + (with depot.users.wpcarro.emacs.pkgs; [ + maybe + ]); + }) + { }; + + emacs = (pkgs.emacsPackagesFor pkgs.emacs28).emacsWithPackages (epkgs: [ + math + ]); +in +math.overrideAttrs (_old: { + doCheck = true; + checkPhase = '' + ${emacs}/bin/emacs -batch \ + -l ert -l ${./tests.el} -f ert-run-tests-batch-and-exit + ''; +}) diff --git a/users/wpcarro/emacs/pkgs/math/math.el b/users/wpcarro/emacs/pkgs/math/math.el new file mode 100644 index 000000000000..dbc527928a30 --- /dev/null +++ b/users/wpcarro/emacs/pkgs/math/math.el @@ -0,0 +1,63 @@ +;;; math.el --- Math stuffs -*- lexical-binding: t -*- + +;; Author: William Carroll +;; Version: 0.0.1 +;; Package-Requires: ((emacs "24.3")) + +;;; Commentary: +;; Containing some useful mathematical functions. + +;;; Code: + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Dependencies +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(require 'dash) +(require 'maybe) +(require 'cl-lib) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Constants +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defconst math-pi pi + "The number pi.") + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Functions +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; TODO: Support all three arguments. +;; Int -> Int -> Int -> Boolean +(cl-defun math-triangle-of-power (&key base power result) + (cond + ((-all? #'maybe-some? (list base power result)) + (error "All three arguments should not be set")) + ((-all? #'maybe-some? (list power result)) + (message "power and result")) + ((-all? #'maybe-some? (list base result)) + (log result base)) + ((-all? #'maybe-some? (list base power)) + (expt base power)) + (t + (error "Two of the three arguments must be set")))) + +(defun math-mod (x y) + "Return X mod Y." + (mod x y)) + +(defun math-exp (x y) + "Return X raised to the Y." + (expt x y)) + +(defun math-round (x) + "Round X to nearest ones digit." + (round x)) + +(defun math-floor (x) + "Floor value X." + (floor x)) + +(provide 'math) +;;; math.el ends here diff --git a/users/wpcarro/emacs/pkgs/math/tests.el b/users/wpcarro/emacs/pkgs/math/tests.el new file mode 100644 index 000000000000..ef3430c9131b --- /dev/null +++ b/users/wpcarro/emacs/pkgs/math/tests.el @@ -0,0 +1,25 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Dependencies +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(require 'ert) +(require 'math) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Tests +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(ert-deftest math-mod () + (should (= 0 (math-mod 9 3))) + (should (= 4 (math-mod 9 5)))) + +(ert-deftest math-exp () + (should (= 9 (math-exp 3 2))) + (should (= 8 (math-exp 2 3)))) + +(ert-deftest math-round () + (should (= 10 (math-round 9.5))) + (should (= 9 (math-round 9.45)))) + +(ert-deftest math-floor () + (should (= 9 (math-floor 9.5)))) -- cgit 1.4.1