From c10d1aef34f5b74e2099faa73b3ca316f8d46248 Mon Sep 17 00:00:00 2001 From: vaclavt Date: Mon, 10 Jan 2022 20:28:37 +0100 Subject: [PATCH] stdlib additions --- stdlib/stdlib.lsp | 73 +++++++++++++++++++++++++++++++++++++++++++++++ tests/test.lsp | 33 ++++++++------------- 2 files changed, 85 insertions(+), 21 deletions(-) diff --git a/stdlib/stdlib.lsp b/stdlib/stdlib.lsp index c144b6b..44f829c 100644 --- a/stdlib/stdlib.lsp +++ b/stdlib/stdlib.lsp @@ -175,3 +175,76 @@ rows_str )) + + +; looks into lst's elements and when there is a list with first item with name, it returns the _second_ element of that list +(defun find-val-in-list (lst name) + (do + (define found_val nil) + (define i 0) + + (define list_len (len lst)) + (while (and (>= i 0) (< i list_len)) + (define e (index lst i)) + (set! i (inc i)) + (if (= (type e) "list") + (if (= (type (first e)) "list") + (do (set! found_val (find-val-in-list (first e) name)) + (if (!= found_val nil) (set! i -1)) + ) + ; else + (do + (if (= name (first e)) + (do + (set! found_val (second e)) (set! i -1) + ) + ; else + (if (= (type (second e)) "list") + (do (set! found_val (find-val-in-list (second e) name)) + (if (!= found_val nil) + (set! i -1) + ) + ) + ) + ) + ) + ) + ) + ; else + (if (= name e) + (do (set! found_val (index lst (inc i))) (set! i -1)) + ) + ) + found_val + )) + + +(defun min (l) + (if (or (not l) (= (len l) 0)) + nil + (do + (define minn (index l 0)) + (define i 1) + (while (< i (len l)) + (if (< (index l i) minn) + (set! minn (index l i))) + (set! i (inc i)) + ) + minn + ) + )) + +(defun max (l) + (if (or (not l) (= (len l) 0)) + nil + (do + (define maxx (index l 0)) + (define i 1) + (while (< i (len l)) + (if (> (index l i) maxx) + (set! maxx (index l i))) + (set! i (inc i)) + ) + maxx + ) + )) \ No newline at end of file diff --git a/tests/test.lsp b/tests/test.lsp index 33be7dc..a59641d 100644 --- a/tests/test.lsp +++ b/tests/test.lsp @@ -24,6 +24,7 @@ (define b 30) (define json_list (parse-json "{\"k1\":\"v1\", \"k2\":42, \"k3\":[\"a\",123,true,false,null]}")) +(define fvil_list '(("a" ("av" "avv")) ("b" "bv") (31 32 33) (41 42 43))) (thread-create (tcp-server 7778 (lambda (str) (list #t (+ "(print \"" (string-upcase str) "\")"))))) @@ -133,33 +134,23 @@ (ut::define-test "result of (start-of-year)" '(ut::assert-equal 1609459200 (start-of-year (str-to-date "2021-05-13 10:32:12" "%Y-%m-%d %H:%M:%S")))) (ut::define-test "result of (end-of-year)" '(ut::assert-equal 1640995199 (end-of-year (str-to-date "2021-05-13 10:32:12" "%Y-%m-%d %H:%M:%S")))) -(ut::define-test "(read-file-lines \"/tmp/f.txt\" counter)" '(ut::assert-equal 3 (read-file-lines "/tmp/f.txt" counter))) +(ut::define-test "result of (read-file-lines \"/tmp/f.txt\" counter)" '(ut::assert-equal 3 (read-file-lines "/tmp/f.txt" counter))) (ut::define-test "result of create table" '(ut::assert-equal ((0 "table created" 0)) (usql "create table a (i integer not null, s varchar(64), f float null, d date null, b boolean)"))) (ut::define-test "result tcp-client" '(ut::assert-equal "(print \"ABCD\")" (tcp-client "127.0.0.1" 7778 "abcd"))) +(ut::define-test "result t(find-val-in-list \"a\")" '(ut::assert-equal '("av" "avv") (find-val-in-list fvil_list "a"))) +(ut::define-test "result t(find-val-in-list \"b\")" '(ut::assert-equal "bv" (find-val-in-list fvil_list "b"))) +(ut::define-test "result t(find-val-in-list 31)" '(ut::assert-equal 32 (find-val-in-list fvil_list 31))) + +(ut::define-test "result of (max (10 9 8 7 6 5 4 3 2 1))" '(ut::assert-equal 10 (max '(10 9 8 7 6 5 4 3 2 1)))) +(ut::define-test "result of (max ())" '(ut::assert-equal nil (max '()))) +(ut::define-test "result of (min (10 9 8 7 6 5 4 3 2 1))" '(ut::assert-equal 1 (min '(10 9 8 7 6 5 4 3 2 1)))) +(ut::define-test "result of (min ())" '(ut::assert-equal nil (min '()))) + + ;(ut::define-test "result of " '(ut::assert-true ) (ut::run-tests) (threads-join) - -;; (include "/usr/local/var/mlisp/terminal.lsp") - -;; (print (term-red "red text")) -;; (print (term-green "green text")) -;; (print (term-yellow "yellow text")) -;; (print (term-blue "blue text")) -;; (print (term-magenta "magenta text")) -;; (print (term-cyan "cyan text")) -;; (print (term-white "white text")) -;; (print (term-bold "bold text")) -;; (print (term-underline "underline text")) -;; (print "normal text") - -;; (print (+ (term-red (sprintf "%.2f" (list 1.11))) " " -;; (term-green (sprintf "%.2f" (list 1.11))) " " -;; (term-blue (sprintf "%.2f" (list 1.11))) " " -;; (term-yellow (sprintf "%.2f" (list 1.11))) " " -;; )) -