profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/vindarel/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.

CodyReichert/awesome-cl 1661

A curated list of awesome Common Lisp frameworks, libraries and other shiny stuff.

azzamsa/awesome-lisp-companies 237

Awesome Lisp Companies

unrelentingtech/django-mode 96

Django mode and snippets for Emacs

lisp-tips/lisp-tips 77

Common Lisp tips. Share !

vindarel/awesome-no-js-web-frameworks 22

Isomorphic web frameworks solving the JavaScript Problem.

vindarel/ABStock 18

Your catalogue of books and other products.

OpenBookStore/openbookstore 12

Bibliographic search of books and personal manager https://gitlab.com/myopenbookstore/openbookstore

vindarel/abelujo 12

Free software for bookshops and publishers. http://www.abelujo.cc/ Mirror (out of sync) of https://gitlab.com/vindarel/abelujo

vindarel/bookshops 3

Search for books, CDs and DVDs on real bookshops' websites. Mirror of https://gitlab.com/vindarel/bookshops/ (sometimes out of sync)

PullRequestReviewEvent

Pull request review commentLispCookbook/cl-cookbook

Added VSCode docs

+---+title: Using VSCode with Alive+---++The+[Alive](https://marketplace.visualstudio.com/items?itemName=rheller.alive)+extension makes [VSCode](https://code.visualstudio.com) a powerful+Common Lisp development platform. Alive hooks directly into the Swank+server that Emacs Slime uses and is fully compatible with VSCode's+ability to develop remotely in containers, WSL, Remote machines, etc.+It has no dependencies beyond a version of Common Lisp running on the+target platform that can run the Swank server.  It currently supports:+- Syntax highlighting+- Code completion+- Code formatter+- Jump to definition+- Snippets+- REPL integration+- Interactive Debugger+- REPL history+- Inline evaluation+- Macro expand+- Disassemble+- Inspector+- Hover Text+- Rename function args and let bindings+- Code folding++![](assets/commonlisp-vscode-alive.png)++### Prerequisites++The Alive extension in VSCode is compatible with ANSI Common Lisp,+and these instructions should work for any of them as long as the Alive+REPL starts up successfully.  The examples all use SBCL.++- [VsCode](https://code.visualstudio.com) with [command+  line](https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line)+  installed running the+  [Alive](https://marketplace.visualstudio.com/items?itemName=rheller.alive)+  extension.+- [SBCL](http://www.sbcl.org)++#### Connect VSCode to a REPL++![](assets/vscode-gifs/attach-repl.gif)++1. Inside of VSCode, open a lisp file that you want to edit.+   - If you don't have one, create a new one called `hello.lisp`+2. Inside of VSCode, open the Command Palette on the menu at the top+   where it says `View/Command Palette` and start an instance of SBCL+   running a Swank server attached to your VSCode REPL by choosing:+   `Alive: Start REPL And Attach`.+   - You will see a small window pop up that says `REPL Connected`+   - If you don't get a `REPL Connected` message, open up VSCode's+     Output on the menu at the top where it says `View:Output` and+     choose `Swank Trace` from the pulldown. This output is the output+     from the running lisp image and will get you started on figuring+     out what might be going wrong.++Congrats, You now have a VSCode instance running a REPL attached to a+Swank server running on port 4005 of a running SBCL image.  You can+now evaluate statements in your file and they will be processed in+your running SBCL instance.++_To disconnect your REPL and shut down your SBCL instance, open the+Command Palette on the menu at the top where it says `View/Command+Palette` and choose: `Alive: Detach from REPL`_++There are keybindings for every operation, feel free to explore and+modify those as needed.++### Recipes++_All recipes assume you have a file open in VSCode running with an attached+REPL unless otherwise stated._++_When evaluating an expression, you choose the expression to evaluate by+putting your cursor anywhere in or immediately following the+s-expression that you wish to evaluate._++#### Evaluate a statement in-line++![](assets/vscode-gifs/in-line-eval.gif)++1. In your open file in your editor window, enter:+   ~~~lisp+   (+ 2 2)+   ~~~+2. Open the Command Palette on the menu at the top `View/Command+   Palette` and choose `Alive: Inline Eval`+3. You will see a small pop up that says `=> 4 (3 bits, #x4, #o4,+   #b100)`, which is the result++   _Evaluating a statement in-line is exactly the same as sending it to+   the REPL.  The only difference is how it is displayed._++#### Evaluate a statement++![](assets/vscode-gifs/eval.gif)++1. In your open file in your editor window, enter:+   ~~~lisp+   (+ 2 2)+   ~~~+2. Open the Command Palette on the menu at the top `View/Command+   Palette` and choose `Alive: Send To REPL`+3. You will see the expression show up in the REPL along with the result.+   ~~~lisp+   CL-USER>+   (+ 2 2)+   4+   CL-USER>+   ~~~++#### Compile a file++![](assets/vscode-gifs/compile.gif)++1. In your open file in your editor window, enter:+   ~~~lisp+   (+ 2 2)+   ~~~+2. Open the Command Palette on the menu at the top `View/Command+   Palette` and choose `Alive: Compile`+3. You will see details about the compile in your repl, and a fasl file+   in your filesystem.+   ~~~lisp+   CL-USER>++   ; compiling file "/Users/jason/Desktop/hello.lisp" (written 14 SEP 2021 04:24:37 AM):+++   ; wrote /Users/jason/Desktop/hello.fasl++   ; compilation finished in 0:00:00.001+   ~~~++#### Use the Interactive Debugger to abort++![](assets/vscode-gifs/debug-abort.gif)++1. In your open file in your editor window, enter:+   ~~~lisp+   (defun divide (x y)+     (/ x y))+   ~~~+2. Put your cursor after the last parenthesis if it isn't already there.+   Open the Command Palette on the menu at the top `View/Command+   Palette` and choose `Alive: Inline Eval` to load your `define`+   function into your image.+3. In your open file, add another new line and enter:+   ~~~lisp+   (divide 1 0)+   ~~~+4. Put your cursor after the last parenthesis if it isn't already there.+   Open the Command Palette on the menu at the top `View/Command+   Palette` and choose `Alive: Inline Eval` to run your divide function+   in your image.+5. You will see the Interactive Debugger pop up.  In the `Restarts`+   section, choose option 2 to Abort.+6. You're now back to your editor and still-running REPL and can+   continue like it never happened.++#### Use the Interactive Debugger to fix a problem at runtime++![](assets/vscode-gifs/debug-fix.gif)++1. In your open file in your editor window, enter:+   ~~~lisp+   (defun divide (x y)+     (assert (not (zerop y))+	          (y)+	          "The second argument can not be zero. Please change it.")+     (/ x y))+   ~~~+2. Put your cursor after the last parenthesis if it isn't already there.+   Open the Command Palette on the menu at the top `View/Command+   Palette` and choose `Alive: Inline Eval` to load your `define`+   function into your image.+3. In your open file, add another new line and enter:+   ~~~lisp+   (divide 1 0)+   ~~~+4. Put your cursor after the last parenthesis if it isn't already there.+   Open the Command Palette on the menu at the top `View/Command+   Palette` and choose `Alive: Inline Eval` to run your divide function+   in your image.+5. You will see the Interactive Debugger pop up.  In the `Restarts`+   section, choose option 0 to "Retry assertion with new value for Y".+6. In the popup menu, enter `y'+7. In the next popup menu, enter `1`+8. You should now see a small pop up that says `=> 1 (1 bit, #x1, #o1,+   #b1)`, which is the result of the new value. You're now back to your+   editor and still-running REPL after crashing out into the debugger,+   having it let you change the value that caused the crash, and then+   proceeding like you never typed that bad `0` value.++_ More ideas for what can be done with the debugger can be found+[here](error_handling.md)_++#### Expand a macro++![](assets/vscode-gifs/macro-expand.gif)++1. In your open file in your editor window, enter:+   ~~~lisp+   (loop for x in '(a b c d e) do+        (print x))+   ~~~+2. Put your cursor after the last parenthesis if it isn't already there.+   Open the Command Palette on the menu at the top `View/Command+   Palette` and choose `Alive: Macro Expand` to expand the for-loop macro.+3. You should see something like this:+   ~~~lisp+   (BLOCK NIL+     (LET ((X NIL)+           (#:LOOP-LIST-559+            (SB-KERNEL:THE* (LIST :USE-ANNOTATIONS T :SOURCE-FORM '(A B C D E))+                            '(A B C D E))))+       (DECLARE (IGNORABLE #:LOOP-LIST-559)+                (IGNORABLE X))+       (TAGBODY+        SB-LOOP::NEXT-LOOP+         (SETQ X (CAR #:LOOP-LIST-559))+         (SETQ #:LOOP-LIST-559 (CDR #:LOOP-LIST-559))+         (PRINT X)+         (IF (ENDP #:LOOP-LIST-559)+             (GO SB-LOOP::END-LOOP))+         (GO SB-LOOP::NEXT-LOOP)+        SB-LOOP::END-LOOP)))+   ~~~++#### Disassemble a function++![](assets/vscode-gifs/disassemble.gif)++1. In your open file in your editor window, enter:+   ~~~lisp+   (defun hello (name)+     (format t "Hello, ~A~%" name))+   ~~~+2. Put your cursor after the last parenthesis if it isn't already there.+   Open the Command Palette on the menu at the top `View/Command+   Palette` and choose `Alive: Inline Eval` to load the function into+   your image.+2. Put your cursor after the last parenthesis if it isn't already there.+   Open the Command Palette on the menu at the top `View/Command+   Palette` and choose `Alive: Disassemble` print out the machine code+   of your compiled function.+3. It will start something like this:+   ~~~+   ; disassembly for HELLO+   ; Size: 172 bytes. Origin: #x70052478B4                       ; HELLO+   ; 8B4:       AC0A40F9         LDR R2, [THREAD, #16]           ; binding-stack-pointer+   ; 8B8:       4C0F00F9         STR R2, [CFP, #24]+   ; 8BC:       AC4642F9         LDR R2, [THREAD, #1160]         ; tls: *STANDARD-OUTPUT*+   ; 8C0:       9F8501F1         CMP R2, #97+   ; 8C4:       61000054         BNE L0+   ; 8C8:       4AFDFF58         LDR R0, #x7005247870            ; '*STANDARD-OUTPUT*+   ; 8CC:       4C1140F8         LDR R2, [R0, #1]+   ; 8D0: L0:   4C1700F9         STR R2, [CFP, #40]+   ; 8D4:       E0031BAA         MOV NL0, CSP+   ; 8D8:       7A0701F8         STR CFP, [CSP], #16+   ; 8DC:       EAFCFF58         LDR R0, #x7005247878            ; "Hello, "+   ; 8E0:       4B1740F9         LDR R1, [CFP, #40]+   ; 8E4:       B6FBFF58         LDR LEXENV, #x7005247858        ; #<SB-KERNEL:FDEFN WRITE-STRING>+   ; 8E8:       970080D2         MOVZ NARGS, #4+   ; 8EC:       FA0300AA         MOV CFP, NL0+   ; 8F0:       DE9240F8         LDR LR, [LEXENV, #9]+   ; 8F4:       C0033FD6         BLR LR+   ; 8F8:       3B039B9A         CSEL CSP, OCFP, CSP, EQ+   ; 8FC:       E0031BAA         MOV NL0, CSP+   ; 900:       7A0701F8         STR CFP, [CSP], #16+   ; 904:       4A2F42A9         LDP R0, R1, [CFP, #32]+   ; 908:       D6FAFF58         LDR LEXENV, #x7005247860        ; #<SB-KERNEL:FDEFN PRINC>+   ; 90C:       970080D2         MOVZ NARGS, #4+   ; 910:       FA0300AA         MOV CFP, NL0+   ; 914:       DE9240F8         LDR LR, [LEXENV, #9]+   ; 918:       C0033FD6         BLR LR+   ; 91C:       3B039B9A         CSEL CSP, OCFP, CSP, EQ+   ; 920:       E0031BAA         MOV NL0, CSP+   ; 924:       7A0701F8         STR CFP, [CSP], #16+   ; 928:       2A4981D2         MOVZ R0, #2633+   ; 92C:       4B1740F9         LDR R1, [CFP, #40]+   ; 930:       D6F9FF58         LDR LEXENV, #x7005247868        ; #<SB-KERNEL:FDEFN WRITE-CHAR>+   ; 934:       970080D2         MOVZ NARGS, #4+   ; 938:       FA0300AA         MOV CFP, NL0+   ; 93C:       DE9240F8         LDR LR, [LEXENV, #9]+   ; 940:       C0033FD6         BLR LR+   ; 944:       3B039B9A         CSEL CSP, OCFP, CSP, EQ+   ; 948:       EA031DAA         MOV R0, NULL+   ; 94C:       FB031AAA         MOV CSP, CFP+   ; 950:       5A7B40A9         LDP CFP, LR, [CFP]+   ; 954:       BF0300F1         CMP NULL, #0+   ; 958:       C0035FD6         RET+   ; 95C:       E00120D4         BRK #15                         ; Invalid argument count trap+   ~~~++#### Create a skeleton Common Lisp system++![](assets/vscode-gifs/skeleton.gif)++_This recipe creates a new Common Lisp System, so it does not need a+running REPL._++1. Create a folder called `experiment` for your new project+2. Open vscode in your newly created directory+   "`bash+   cd experiment+   code .+   ```+3. Create new Common Lisp System.+   1. Inside of VSCode, Open Command Palette on the menu at the top+      `View/Command Palette` and generate a system skeleton: `Alive: System Skeleton`+   2. The previous command should have generated the following directory+      structure+      - src+        - app.lisp+           ~~~lisp+           (defpackage :app+             (:use :cl))++           (in-package :app)+           ~~~+      - test+        - all.lisp+           ~~~lisp+           (defpackage :test/all+             (:use :cl+                   :app)+             (:export :test-suite))++           (in-package :test/all)++           (defun test-suite ()+             (format T "Test Suite~%"))+           ~~~+      - experiment.asd+         ~~~lisp+         (in-package :asdf-user)++         (defsystem "experiment"+           :class :package-inferred-system+           :depends-on ("experiment/src/app")+           :description ""+           :in-order-to ((test-op (load-op "experiment/test/all")))+           :perform (test-op (o c) (symbol-call :test/all :test-suite)))++         (defsystem "experiment/test"+           :depends-on ("experiment/test/all"))++         (register-system-packages "experiment/src/app" '(:app))+         (register-system-packages "experiment/test/all" '(:test/all))+         ~~~++### Optional Custom Configurations++#### Configuring VSCode Alive to work with Quicklisp++Assuming that you have quicklisp installed and configured to load on+init, quicklisp just works.++#### Configuring VSCode Alive to work with CLPM++Assuming that you have [CLPM](https://clpm.dev) installed and+configured, [modify your vscode+settings](https://code.visualstudio.com/docs/getstarted/settings) to+look like this:++1. Add the following to to your [VSCode settings](https://code.visualstudio.com/docs/getstarted/settings):+```json+  "alive.swank.startupCommand":[+    "clpm",+    "exec",+    "--with-client",+    "--context=$(sbcl \"--noinform\" \"--eval\" \"(require :asdf)\" \"--eval\" \"(write-string (nt(remove-if (lambda (s) (= (length s) 0)) (uiop/utility:split-string (namestring (uiop:getcwd)) :(string (uiop:directory-separator-for-host)))))))\" --eval \"(exit)\")",+    "--",+    "sbcl",+    "--eval",+    "(asdf:load-system :swank)",+    "--eval",+    "(swank:create-server)"+  ],+```++_This will start up a clpm context named after the directory of the+workspace or containing directory of the file on which you're working.+That context line looks the way it does because it is effectively+"scripting" in SBCL.  Instead of using bash or powerscript and leaving+some users out, this example uses lisp to determine the folder name of+the current working directory.  This is convenient because its+cross-platform.  This config works on mac, linux, and windows._++#### Configuring VSCode Alive to work with Roswell++Assuming that you have [Roswell](https://roswell.github.io/) installed,+[modify your vscode+settings](https://code.visualstudio.com/docs/getstarted/settings) to+look like this:++```json+  "alive.swank.startupCommand": [+    "ros",+    "run",+    "--eval",+    "(require :asdf)",+    "--eval",+    "(asdf:load-system :swank)",+    "--eval",+    "(swank:create-server)"+  ]+```++#### Connecting VSCode Alive to a Docker container++![](assets/vscode-gifs/docker-connect.gif)++_These instructions will work for remote connections, wsl connections,+and github Codespaces as well using the `Remote - SSH` and `Remote -+WSL`, and `Github Codespaces` extensions, respectively assuming you have+the extensions installed.  For this example, make sure you have the+[Containers extension installed and+configured](https://code.visualstudio.com/docs/remote/containers)._++1. Pull a docker image that has sbcl installed, in this example, we'll use+   the latest daewok sbcl.

ah, only thing, the daewok images are deprecated, the author now maintains the clfoundation ones: https://hub.docker.com/r/clfoundation/sbcl / https://gitlab.common-lisp.net/cl-docker-images/sbcl/

smashedtoatoms

comment created time in 7 hours

PullRequestReviewEvent

push eventvindarel/lisp-maintainers

vindarel

commit sha ce1c52e66b6307ad7987ceed5a7656e0268e74fb

add alex-gutev

view details

push time in 13 hours

push eventlisp-mirror/clpm

Eric Timmons

commit sha 563a9358abc4e96e2d4868eade298881612f5c0f

Fix typo in README

view details

Eric Timmons

commit sha 7d09baab5a45e1830b04ac6f881bd948ef7eac65

Bump CLPI commit (just documentation update)

view details

Eric Timmons

commit sha dd388090c5a87bbb0e003a7698b0e5eb354e7418

Fix bug with plain git repos

view details

Eric Timmons

commit sha 0aaf3e3f27d07345c6f07ddeeeffd8a24244c4aa

Remove an unnecessary assertion

view details

Eric Timmons

commit sha e339b30259ddb7303a6c623e81a45dcd7544cc1a

CLPM v0.4.0

view details

push time in 21 hours

CommitCommentEvent

pull request commentLispCookbook/cl-cookbook

testing: how to run tests on the terminal with the right exit code

And run-fiveam usage is not very clear.

vindarel

comment created time in 3 days

PR opened LispCookbook/cl-cookbook

testing: how to run tests on the terminal with the right exit code

Frankly, I have struggled way too much with that exit code… I'll learn better practices with the greatest interest, if you have suggestions.

+56 -1

0 comment

1 changed file

pr created time in 3 days

push eventvindarel/cl-cookbook

vindarel

commit sha 4c90e1ded47d77c37aeafcb646d3af9cfc1ddf59

Merge pull request #413 from vindarel/master testing++: formatting, remove Prove, add sections (random checking)

view details

vindarel

commit sha 1de84227901de17a569eff059f3ba7c1fa5ea3c0

testing: how to run tests on the terminal with the right exit code

view details

push time in 3 days

push eventLispCookbook/cl-cookbook

vindarel

commit sha 14550613da8d177294db8c2abc0b7578fa48beba

testing: typos, formatting, some more context

view details

vindarel

commit sha c6e0393977b3c8ac09cbef05b37529517be26cf2

testing: change order of tests: the base case first, SIGNAL last

view details

vindarel

commit sha f5e58d000e82d43b2138726f7b2e937bd25433e9

testing: about fixtures (no code), in its own subsection

view details

vindarel

commit sha 6aac0673b8ded7ecdaf65b3b6e79ffc239dc98b0

testing: about test reasons, with detailed output examples

view details

vindarel

commit sha f30b9cb76d12208b813c301aadcc1e9bf76d681f

testing: fix interactive debugging section (mention FiveAM not Prove)

view details

vindarel

commit sha 0ee8e09ee441bfcdd990214e12945074422296dc

testing: move Slite section to the end, outside FiveAM section

view details

vindarel

commit sha 5205aed5ed1568b69c333c4e7bbdc6f5ca03f6c1

testing: remove Prove section, document how to run a test at C-c C-c

view details

vindarel

commit sha b8d4e316bc3c0dc47f04ae295d1941222ab46af3

testing: add short random testing section

view details

vindarel

commit sha e40addf2be83af24c45c3cd20019f846f09cc7c1

testing: add finishes, pass and is-true assertions

view details

vindarel

commit sha 7387c1f1ceffad9a699c4120baf3d3a7730ebc5f

testing: references: add sabra crolleton massive comparison

view details

vindarel

commit sha 83c03b585aa5a599a4224d73b484f515b07c56b2

(minor) testing: wording (the is macro is likely…)

view details

vindarel

commit sha 07f1322024a89cf33e56cafba98557c113aa3852

testing: wording++

view details

vindarel

commit sha 4c90e1ded47d77c37aeafcb646d3af9cfc1ddf59

Merge pull request #413 from vindarel/master testing++: formatting, remove Prove, add sections (random checking)

view details

push time in 3 days

Pull request review commentLispCookbook/cl-cookbook

testing++: formatting, remove Prove, add sections (random checking)

 the function will return NIL in that case."     (t nil))) ~~~ +We will test that code:++- we must ensure that the content read in a file is the expected content,+- we must test that the condition is signaled if the file doesn't exist.

great, thanks :)

vindarel

comment created time in 3 days

PullRequestReviewEvent

push eventvindarel/cl-cookbook

vindarel

commit sha 07f1322024a89cf33e56cafba98557c113aa3852

testing: wording++

view details

push time in 3 days

push eventvindarel/cl-cookbook

vindarel

commit sha 83c03b585aa5a599a4224d73b484f515b07c56b2

(minor) testing: wording (the is macro is likely…)

view details

push time in 4 days

Pull request review commentLispCookbook/cl-cookbook

testing++: formatting, remove Prove, add sections (random checking)

 the function will return NIL in that case."     (t nil))) ~~~ +We will test that code:++- we must ensure that the content read in a file is the expected content,+- we must test that the condition is signaled if the file doesn't exist.

oh. mmh. "We will write tests for that code" (the code above). "In particular, we must ensure: that the content… - that a condition…".

vindarel

comment created time in 4 days

PullRequestReviewEvent

Pull request review commentLispCookbook/cl-cookbook

testing++: formatting, remove Prove, add sections (random checking)

 title: Testing ---  So you want to easily test the code you're writing? The following-recipes cover how to write automated tests and see their code+recipe covers how to write automated tests and see their code coverage. We also give pointers to plug those in modern continuous-integration services like Travis CI and Coveralls.+integration services like GitHub Actions, Gitlab CI, Travis CI or Coveralls. -[Prove](https://github.com/fukamachi/prove) used to be a widely liked testing framework but its repository was later archived. Its successor [Rove](https://github.com/fukamachi/rove) is not stable enough, so we will be using a mature testing framework called [FiveAM](https://github.com/lispci/fiveam). There are also some [other testing frameworks](https://github.com/CodyReichert/awesome-cl#unit-testing) to explore.+We will be using a mature testing framework called+[FiveAM](https://github.com/lispci/fiveam). It supports test suites,+random testing, test fixtures (to a certain extent) and, of course,+interactive development. -FiveAM only has an [API doc](https://common-lisp.net/project/fiveam/docs/index.html) as official documentation. You may inspect it or simply read the docstrings in code. Most of the time, they would provide sufficient information that answers your questions. +Previously on the Cookbook, the recipe was cooked with [Prove](https://github.com/fukamachi/prove). It used to be a widely liked testing framework but, because of some shortcomings, its repository was later archived. Its successor [Rove](https://github.com/fukamachi/rove) is not stable enough and lacks some features, so we didn't pick it. There are also some [other testing frameworks](https://github.com/CodyReichert/awesome-cl#unit-testing) to explore if you feel like it.++FiveAM has an [API documentation](https://common-lisp.net/project/fiveam/docs/index.html). You may inspect it or simply read the docstrings in code. Most of the time, they would provide sufficient information that answers your questions… if you didn't find them here. Let's get started.  ## Testing with FiveAM  FiveAM has 3 levels of abstraction: check, test and suite. As you may have guessed:-1. A check is a single assertion that asserts a boolean value. -2. A test is the smallest runnable unit. A test case that may contain multiple checks. Any check failure leads to failure of the whole test.-3. A suite is a collection of tests. When a suite is run, all tests inside would be performed. Suite allows paternity, which means that running a suite will run all the tests defined in it and in its children suites. -A simplest code sample containing 3 basic blocks mentioned above can shown as below:+1. A **check** is a single assertion that asserts a boolean value. The most used check is `is`, followed by an assertion of yours. For example, `(is (= 2 (+ 1 1)))`.

"1. A check is a single assertion that checks that its argument is truthy. The most used check is is. For example, (is (= 2 (+ 1 1)))."

vindarel

comment created time in 4 days

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commentLispCookbook/cl-cookbook

testing++: formatting, remove Prove, add sections (random checking)

 title: Testing ---  So you want to easily test the code you're writing? The following-recipes cover how to write automated tests and see their code+recipe covers how to write automated tests and see their code coverage. We also give pointers to plug those in modern continuous-integration services like Travis CI and Coveralls.+integration services like GitHub Actions, Gitlab CI, Travis CI or Coveralls. -[Prove](https://github.com/fukamachi/prove) used to be a widely liked testing framework but its repository was later archived. Its successor [Rove](https://github.com/fukamachi/rove) is not stable enough, so we will be using a mature testing framework called [FiveAM](https://github.com/lispci/fiveam). There are also some [other testing frameworks](https://github.com/CodyReichert/awesome-cl#unit-testing) to explore.+We will be using a mature testing framework called+[FiveAM](https://github.com/lispci/fiveam). It supports test suites,+random testing, test fixtures (to a certain extent) and, of course,+interactive development. -FiveAM only has an [API doc](https://common-lisp.net/project/fiveam/docs/index.html) as official documentation. You may inspect it or simply read the docstrings in code. Most of the time, they would provide sufficient information that answers your questions. +Previously on the Cookbook, the recipe was cooked with [Prove](https://github.com/fukamachi/prove). It used to be a widely liked testing framework but, because of some shortcomings, its repository was later archived. Its successor [Rove](https://github.com/fukamachi/rove) is not stable enough and lacks some features, so we didn't pick it. There are also some [other testing frameworks](https://github.com/CodyReichert/awesome-cl#unit-testing) to explore if you feel like it.++FiveAM has an [API documentation](https://common-lisp.net/project/fiveam/docs/index.html). You may inspect it or simply read the docstrings in code. Most of the time, they would provide sufficient information that answers your questions… if you didn't find them here. Let's get started.  ## Testing with FiveAM  FiveAM has 3 levels of abstraction: check, test and suite. As you may have guessed:-1. A check is a single assertion that asserts a boolean value. -2. A test is the smallest runnable unit. A test case that may contain multiple checks. Any check failure leads to failure of the whole test.-3. A suite is a collection of tests. When a suite is run, all tests inside would be performed. Suite allows paternity, which means that running a suite will run all the tests defined in it and in its children suites. -A simplest code sample containing 3 basic blocks mentioned above can shown as below:+1. A **check** is a single assertion that asserts a boolean value. The most used check is `is`, followed by an assertion of yours. For example, `(is (= 2 (+ 1 1)))`.

yes it is called a check in fiveam.

vindarel

comment created time in 4 days

pull request commentLispCookbook/cl-cookbook

testing++: formatting, remove Prove, add sections (random checking)

@sheepduke All good for you? @AlbertoEAF @alx-a Any review welcomed! (typos, wording, structure, style…)

vindarel

comment created time in 4 days

issue openedquicklisp/quicklisp-projects

Update cl-cron repository

Hi,

cl-cron was developed on bitbucket: https://bitbucket.org/mackram/cl-cron (404) and it received some commits here:

https://github.com/ciel-lang/cl-cron

especially: all threads are named, use of defvar instead of defparameter, use of bt:with-lock-held instead of acquire/release, bus factor of 2 \o/

cl-cron is a nice DSL for cron-like schedulers:

(defun say-hi ()
  (print "Hi!"))

(cl-cron:make-cron-job #'say-hi :)
(cl-cron:start-cron)

Thanks

created time in 5 days

issue commentlisp-mirror/cl-cron

make-cron-job : List args don't works on ECL

Hi, cl-cron is now somewhat maintained here: https://github.com/ciel-lang/cl-cron

flotsfacetieux

comment created time in 5 days

MemberEvent

push eventvindarel/cl-cookbook

vindarel

commit sha b8d4e316bc3c0dc47f04ae295d1941222ab46af3

testing: add short random testing section

view details

vindarel

commit sha e40addf2be83af24c45c3cd20019f846f09cc7c1

testing: add finishes, pass and is-true assertions

view details

vindarel

commit sha 7387c1f1ceffad9a699c4120baf3d3a7730ebc5f

testing: references: add sabra crolleton massive comparison

view details

push time in 5 days

push eventCodyReichert/awesome-cl

vindarel

commit sha 41f140e1241081d6458fca825b11092b1ac210a8

testing: rm Rove. Too many issues, not interactive friendly. See the Cookbook discussion.

view details

push time in 5 days

push eventvindarel/cl-cookbook

vindarel

commit sha 92f97f38cf87c2829907e43ed217dd295ee23ded

testing: references: add sabra crolleton massive comparison

view details

push time in 5 days

push eventvindarel/cl-cookbook

vindarel

commit sha e0487da5ff352f7eb33e4b3e1f3a8f12bdc00fb2

testing: add finishes, pass and is-true assertions

view details

push time in 5 days