feat(wpcarro/emacs): Package maybe.el
(Temporarily) remove dependency on list.el in favor of dash, which I'm not thrilled about. Change-Id: Ic4348ee72582dee63ba07a183f3bda65baa7e2d6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5999 Reviewed-by: wpcarro <wpcarro@gmail.com> Autosubmit: wpcarro <wpcarro@gmail.com> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									4a4f8f9358
								
							
						
					
					
						commit
						230c4bbb3e
					
				
					 6 changed files with 59 additions and 25 deletions
				
			
		|  | @ -33,6 +33,7 @@ | ||||||
| (require 'struct) | (require 'struct) | ||||||
| (require 'ts) | (require 'ts) | ||||||
| (require 'general) | (require 'general) | ||||||
|  | (require 'list) | ||||||
| 
 | 
 | ||||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||||
| ;; Library | ;; Library | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ | ||||||
| ;; Dependencies | ;; Dependencies | ||||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||||
| 
 | 
 | ||||||
|  | (require 'dash) | ||||||
| (require 'maybe) | (require 'maybe) | ||||||
| (require 'cl-lib) | (require 'cl-lib) | ||||||
| 
 | 
 | ||||||
|  | @ -31,13 +32,13 @@ | ||||||
| ;; Int -> Int -> Int -> Boolean | ;; Int -> Int -> Int -> Boolean | ||||||
| (cl-defun math-triangle-of-power (&key base power result) | (cl-defun math-triangle-of-power (&key base power result) | ||||||
|   (cond |   (cond | ||||||
|    ((maybe-somes? base power result) |    ((-all? #'maybe-some? (list base power result)) | ||||||
|     (error "All three arguments should not be set")) |     (error "All three arguments should not be set")) | ||||||
|    ((maybe-somes? power result) |    ((-all? #'maybe-some? (list power result)) | ||||||
|     (message "power and result")) |     (message "power and result")) | ||||||
|    ((maybe-somes? base result) |    ((-all? #'maybe-some? (list base result)) | ||||||
|     (log result base)) |     (log result base)) | ||||||
|    ((maybe-somes? base power) |    ((-all? #'maybe-some? (list base power)) | ||||||
|     (expt base power)) |     (expt base power)) | ||||||
|    (t |    (t | ||||||
|     (error "Two of the three arguments must be set")))) |     (error "Two of the three arguments must be set")))) | ||||||
|  |  | ||||||
|  | @ -27,6 +27,7 @@ let | ||||||
|     (with wpcarro.emacs.pkgs; [ |     (with wpcarro.emacs.pkgs; [ | ||||||
|       al |       al | ||||||
|       list |       list | ||||||
|  |       maybe | ||||||
|       set |       set | ||||||
|       struct |       struct | ||||||
|       zle |       zle | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								users/wpcarro/emacs/pkgs/maybe/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								users/wpcarro/emacs/pkgs/maybe/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | ||||||
|  | { pkgs, depot, ... }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   maybe = pkgs.callPackage | ||||||
|  |     ({ emacsPackages }: | ||||||
|  |       emacsPackages.trivialBuild { | ||||||
|  |         pname = "maybe"; | ||||||
|  |         version = "1.0.0"; | ||||||
|  |         src = ./maybe.el; | ||||||
|  |         packageRequires = [ ]; | ||||||
|  |       }) | ||||||
|  |     { }; | ||||||
|  | 
 | ||||||
|  |   emacs = (pkgs.emacsPackagesFor pkgs.emacs28).emacsWithPackages (epkgs: [ | ||||||
|  |     maybe | ||||||
|  |   ]); | ||||||
|  | in | ||||||
|  | maybe.overrideAttrs (_old: { | ||||||
|  |   doCheck = true; | ||||||
|  |   checkPhase = '' | ||||||
|  |     ${emacs}/bin/emacs -batch \ | ||||||
|  |       -l ert -l ${./tests.el} -f ert-run-tests-batch-and-exit | ||||||
|  |   ''; | ||||||
|  | }) | ||||||
|  | @ -31,19 +31,6 @@ | ||||||
| 
 | 
 | ||||||
| ;;; Code: | ;;; Code: | ||||||
| 
 | 
 | ||||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |  | ||||||
| ;; Dependencies |  | ||||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |  | ||||||
| 
 |  | ||||||
| (require 'list) |  | ||||||
| 
 |  | ||||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |  | ||||||
| ;; Constants |  | ||||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |  | ||||||
| 
 |  | ||||||
| (defvar maybe--run-tests? t |  | ||||||
|   "When t, run the test suite defined herein.") |  | ||||||
| 
 |  | ||||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||||
| ;; Library | ;; Library | ||||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||||
|  | @ -56,14 +43,6 @@ | ||||||
|   "Return t when X is non-nil." |   "Return t when X is non-nil." | ||||||
|   (not (maybe-nil? x))) |   (not (maybe-nil? x))) | ||||||
| 
 | 
 | ||||||
| (defun maybe-nils? (&rest xs) |  | ||||||
|   "Return t if all XS are nil." |  | ||||||
|   (list-all? #'maybe-nil? xs)) |  | ||||||
| 
 |  | ||||||
| (defun maybe-somes? (&rest xs) |  | ||||||
|   "Return t if all XS are non-nil." |  | ||||||
|   (list-all? #'maybe-some? xs)) |  | ||||||
| 
 |  | ||||||
| (defun maybe-default (default x) | (defun maybe-default (default x) | ||||||
|   "Return DEFAULT when X is nil." |   "Return DEFAULT when X is nil." | ||||||
|   (if (maybe-nil? x) default x)) |   (if (maybe-nil? x) default x)) | ||||||
							
								
								
									
										28
									
								
								users/wpcarro/emacs/pkgs/maybe/tests.el
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								users/wpcarro/emacs/pkgs/maybe/tests.el
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | ||||||
|  | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||||
|  | ;; Dependencies | ||||||
|  | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||||
|  | 
 | ||||||
|  | (require 'maybe) | ||||||
|  | 
 | ||||||
|  | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||||
|  | ;; Tests | ||||||
|  | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||||
|  | 
 | ||||||
|  | (ert-deftest maybe-nil? () | ||||||
|  |   (and | ||||||
|  |    (maybe-nil? nil) | ||||||
|  |    (not (maybe-nil? t)))) | ||||||
|  | 
 | ||||||
|  | (ert-deftest maybe-some? () | ||||||
|  |   (and | ||||||
|  |    (maybe-some? '(1 2 3)) | ||||||
|  |    (not (maybe-some? nil)))) | ||||||
|  | 
 | ||||||
|  | (ert-deftest maybe-default () | ||||||
|  |   (and | ||||||
|  |    (string= "some" (maybe-default "some" nil)) | ||||||
|  |    (= 10 (maybe-default 1 10)))) | ||||||
|  | 
 | ||||||
|  | (ert-deftest maybe-map () | ||||||
|  |   (eq nil (maybe-map (lambda (x) (* x 2)) nil)) | ||||||
|  |   (= 4 (maybe-map (lambda (x) (* x 2)) 2))) | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue