From ea76cdf0be84cc8e1ebd8c65c95961bc22d3d386 Mon Sep 17 00:00:00 2001 From: VaclavT Date: Tue, 4 May 2021 20:59:45 +0200 Subject: [PATCH] unit testing improvements --- debug.lsp | 114 +++++----------------- stdlib/stdlib.lsp | 2 +- stdlib/ut.lsp | 30 +++--- tests/test.lsp | 240 ++++++++++++++-------------------------------- 4 files changed, 111 insertions(+), 275 deletions(-) diff --git a/debug.lsp b/debug.lsp index f3444fe..48ca4e5 100644 --- a/debug.lsp +++ b/debug.lsp @@ -1,109 +1,43 @@ -;; (print (string-split "split me by space" "\\s+")) - - -;; (print (string-rtrim "abc ")) -;; (print (string-ltrim " abc")) -;; (print (string-trim " abc ")) - -;; (defun string-upcase (str) -;; (string-case str "upper")) - -;; (defun string-downcase (str) -;; (string-case str "lower")) - -;; (print (string-upcase "abcABCD")) -;; (print (string-downcase "abcABCD")) - -;; (print (sprintf "%.2f" (list 1.25))) - -;; (print (sprintf "%.2f" '(1.23456))) -;; (print (sprintf "%d" '(10000000))) - -;; (define q 1.23) -;; (print (sprintf "%+.2f%%" (list q))) - -;; (define q -1.23) -;; (print (sprintf "%+.2f%%" (list q))) - -;; (define term-rst-esc "\x1B[0m") -;; (define term-red-esc '"\x1B[31m") -;; (define term-green-esc "\x1B[32m") - -;; (defun term-red (str) (sprintf (+ term-red-esc str term-rst-esc))) - -;; (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))) " " -;; )) ;; (benchmark "benchmark makelist 1000 : " (make-list 1000)) ;; (benchmark "benchmark range 1000 : " (range 1 1000)) -;; (define fdx_list (parse-csv (read-file "tests/csv_data.csv"))) -;; (print fdx_list) - -;; (print (and (print "xx") (= 1 0) (print "yy"))) - -;; (defun aa () (do -;; (print "prvni") -;; (+ 1 xx) -;; (print "druhy") -;; )) - -;; (aa) - -; (sleep 1.5) - -;; does not work aif n is defined. in that case it is copied to lambda_scope -;; (define multiply-by (lambda (n) (lambda (y) (* y n)))) -;; (define doubler (multiply-by 2)) -;; (define tripler (multiply-by 3)) -;; (doubler 4) -;; (tripler 4) - - ;https://github.com/anthay/Lisp90/blob/master/lisp90.cpp ;http://howtowriteaprogram.blogspot.com/2010/11/lisp-interpreter-in-90-lines-of-c.html ; https://stackoverflow.com/questions/526082/in-scheme-whats-the-point-of-set -(define x 3) -(defun foo() (do (define x 4) x)) -(defun bar() (do (set! x 4) x)) +;; (define x 3) +;; (defun foo() (do (define x 4) x)) +;; (defun bar() (do (set! x 4) x)) -(foo) ; returns 4 -x ; still 3 -(bar) ; returns 4 -x ; is now 4 +;; (foo) ; returns 4 +;; x ; still 3 +;; (bar) ; returns 4 +;; x ; is now 4 -(defun mini-uuid (uuid_len) (do - (define a_list '("_" "-" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z")) - (reduce (lambda (acc y) (+ acc y)) "" (map (lambda (e) (index a_list (random 0 (- (len a_list) 1)))) (range 0 uuid_len))) -)) +;; (defun mini-uuid (uuid_len) (do +;; (define a_list '("_" "-" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z")) +;; (reduce (lambda (acc y) (+ acc y)) "" (map (lambda (e) (index a_list (random 0 (- (len a_list) 1)))) (range 0 uuid_len))) +;; )) -(benchmark "uuid 1000x :" (define i 0) (while (< i 1000) (do (mini-uuid 5) (define i (+ i 1))))) +;; (benchmark "uuid 1000x :" (define i 0) (while (< i 1000) (do (mini-uuid 5) (define i (+ i 1))))) +;; (define first_tid (thread-create (while 1 (do (thread-under-lock "ilock" (print 1)) (thread-sleep 50))))) +;; (define second_tid (thread-create (while 1 (do (thread-under-lock "ilock" (print 2)) (thread-sleep 75))))) + +;; (print "first thread id:" first_tid) +;; (print "second thread id:" second_tid) - -(defun plus-jedna() (do (set! xx (+ 1 xx)))) -(define xx 3) - -(plus-jedna) -(plus-jedna) +;; (threads-join) +;; (print "ok") - - -(define first_tid (thread-create (while 1 (do (thread-under-lock "ilock" (print 1)) (thread-sleep 50))))) -(define second_tid (thread-create (while 1 (do (thread-under-lock "ilock" (print 2)) (thread-sleep 75))))) - -(print "first thread id:" first_tid) -(print "second thread id:" second_tid) - - -(threads-join) -(print "ok") +;; (define av (read-url "https://www.alphavantage.co/query?function=EARNINGS&symbol=WFC&apikey=LJ4XGQ7BQIL925RF")) +;; (if (= (first av) 200) +;; (do +;; (define json (parse-json (second av))) +;; )) diff --git a/stdlib/stdlib.lsp b/stdlib/stdlib.lsp index 538f3af..34b9f6e 100644 --- a/stdlib/stdlib.lsp +++ b/stdlib/stdlib.lsp @@ -71,7 +71,7 @@ ; TODO when nil will be implemented itm / nil (if (!= -1 found_index) 1 - 0) + nil) )) (defun make-list-of (size val) diff --git a/stdlib/ut.lsp b/stdlib/ut.lsp index 2a862a7..fa8359e 100644 --- a/stdlib/ut.lsp +++ b/stdlib/ut.lsp @@ -1,36 +1,38 @@ +(include "/usr/local/var/mlisp/terminal.lsp") (defun ut::assert-equal (value form) (do (define fvalue (eval form)) (if (= value fvalue) 1 - nil - ) + nil) )) -(defun ut::assert-true (test) - (ut::assert-equal 1 test)) - -(defun ut::assert-false (test) - (ut::assert-equal nil test)) +(defun ut::assert-true (test) (ut::assert-equal 1 test)) +(defun ut::assert-false (test) (ut::assert-equal nil test)) (defun ut::define-test (name exp_list) (set! ut::tests_list (push ut::tests_list (list name exp_list)))) -(defun ut::run-tests () - (do +(defun ut::run-tests () (do + (define oks 0) + (define errs 0) (for t ut::tests_list (if (eval (index t 1)) - (print (+ "OK -> " (index t 0))) - (print (+ "ERR -> " (index t 0)))) - ))) + (do (set! oks (+ oks 1)) (print (+ (term-green "OK") " -> " (index t 0)))) + (do (set! errs (+ errs 1)) (print (+ (term-red "ERR") " -> " (index t 0))))) + ) + (if (= errs 0) + (print (term-green (+ (string oks) " test(s) OK"))) + (print (term-red (+ (string errs) " test(s) FAILED")))) + )) (define ut::tests_list '()) ; TODO (run-test name) ;; example of usage -;; (ut::define-test "je to dvojka" '(ut::assert-equal 2 (+ 1 1))) -;; (ut::define-test "je to trojka" '(ut::assert-equal 3 (+ 1 1))) +;; (ut::define-test "its number 2" '(ut::assert-equal 2 (+ 1 1))) +;; (ut::define-test "tis number 3" '(ut::assert-equal 3 (+ 1 1))) ;; (ut::run-tests) diff --git a/tests/test.lsp b/tests/test.lsp index 871ea7d..626fe7c 100644 --- a/tests/test.lsp +++ b/tests/test.lsp @@ -1,200 +1,100 @@ ; it is expected to be called from parent directory ie: ml -f tests/test.lisp -(include "/usr/local/var/mlisp/terminal.lsp") - -;; unit tests could be in this way -;; (include "/usr/local/var/mlisp/ut.lsp") -;; (ut::define-test "result of (and (> 2 1) (> 2 1))" '(ut::assert-true (and (> 2 1) (> 2 1)))) -;; (ut::run-tests) - -(print "Test starts") - -(print "result of (and (> 2 1) (> 2 1)): " (and (> 2 1) (> 2 1))) -(print "result of (or (> 2 1) (> 2 1)): " (or (> 2 1) (> 2 1))) -(print "result of (and (> 2 1) (> 1 2)): " (and (> 2 1) (> 1 2))) -(print "result of (or (> 2 1) (> 1 2)): " (or (> 2 1) (> 1 2))) -(print "result of (and (> 1 1) (> 1 2)): " (and (> 1 1) (> 1 2))) -(print "result of (or (> 1 1) (> 2 1)): " (or (> 1 1) (> 1 2))) - - -(print "(member '(1 2 3) 1:" (member '(1 2 3) 1)) -(print "(member '(1 2 3) 3:" (member '(1 2 3) 3)) -(print "(member '(1 2 3) 30:" (member '(1 2 3) 30)) - -(print "(make-list 3) :" (make-list 3)) -(print "(make-list-of 3) :" (make-list-of 3 999)) +(include "/usr/local/var/mlisp/ut.lsp") +;; prepare some code to be used in tests (defun fact (n) (if (<= n 1) 1 (* n (fact (- n 1))) )) -(print (fact 5)) - -; for this stack must be 16MB, otherwise 1000 is ok +; for scitej 4000 stack must be 16MB, otherwise 1000 is ok (defun scitej (n) (if (<= n 1) 1 (+ n (scitej (- n 1))) )) -;; (print (scitej 4000)) -(print (scitej 1000)) - - - (define json_list (parse-json "{\"k1\":\"v1\", \"k2\":42, \"k3\":[\"a\",123,true,false,null]}")) -(print json_list) -(for x json_list (print x)) - -(print "sorted: " (quick-sort '(10 9 8 7 6 5 4 3 2 1))) -(print "sorted: " (quick-sort '(1 2 3 4 5 6 7 8 9 10))) -(print "sorted by: " (quick-sort-by '(10 9 8 7 6 5 4 3 2 1) (lambda (a b) (> a b)) )) -(print "sorted by: " (quick-sort-by '(1 2 3 4 5 6 7 8 9 10) (lambda (a b) (> a b)) )) -(print "sorted by desc: " (quick-sort-by '(1 2 3 4 5 6 7 8 9 10) (lambda (a b) (< a b)) )) +(ut::define-test "result of (and (> 2 1) (> 2 1))" '(ut::assert-true (and (> 2 1) (> 2 1)))) +(ut::define-test "result of (or (> 2 1) (> 2 1))" '(ut::assert-true (or (> 2 1) (> 2 1)))) +(ut::define-test "retult of (and (> 2 1) (> 1 2))" '(ut::assert-false (and (> 2 1) (> 1 2)))) +(ut::define-test "result of (or (> 2 1) (> 1 2))" '(ut::assert-true (or (> 2 1) (> 1 2)))) +(ut::define-test "result of (and (> 1 1) (> 1 2))" '(ut::assert-false (and (> 1 1) (> 1 2)))) +(ut::define-test "result of (or (> 1 1) (> 2 1))" '(ut::assert-true (or (> 1 1) (> 2 1)))) +(ut::define-test "result of (member '(1 2 3) 1" '(ut::assert-true (member '(1 2 3) 1))) +(ut::define-test "result of (member '(1 2 3) 3" '(ut::assert-true (member '(1 2 3) 3))) +(ut::define-test "result of (member '(1 2 3) 4" '(ut::assert-false (member '(1 2 3) 4))) -(define csv_str (read-file "tests/data.csv")) -(define csv_list (parse-csv csv_str)) -(for x csv_list - (print x)) +(ut::define-test "result of (make-list 3)" '(ut::assert-equal '(nil nil nil) (make-list 3))) +(ut::define-test "result of (make-list-of 3 999)" '(ut::assert-equal '(999 999 999) (make-list-of 3 999))) +(ut::define-test "result of (fact 5)" '(ut::assert-equal 120 (fact 5))) +(ut::define-test "result of (scitej 1000)" '(ut::assert-equal 500500 (scitej 1000))) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; to create test file with csv -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; (define web_page (read-url "https://query1.finance.yahoo.com/v7/finance/download/FDX?period1=1581272585&period2=1612894985&interval=1d&events=history&includeAdjustedClose=true")) -; (write-file "tests/csv_data.csv" (last web_page)) +(ut::define-test "result of (len json_list)" '(ut::assert-equal 3 (len json_list))) -(define fdx_list (parse-csv (read-file "tests/csv_data.csv"))) -; (print fdx_list) +(ut::define-test "result of (quick-sort (10 9 8 7 6 5 4 3 2 1))" '(ut::assert-equal '(1 2 3 4 5 6 7 8 9 10) (quick-sort '(10 9 8 7 6 5 4 3 2 1)))) +(ut::define-test "result of (quick-sort (10 9 8 7 6 5 4 3 2 10)" '(ut::assert-equal '(1 2 3 4 5 6 7 8 9 10) (quick-sort '(1 2 3 4 5 6 7 8 9 10)))) +(ut::define-test "result of (quick-sort-by (10 9 8 7 6 5 4 3 2 1) (lambda (a b) (> a b)))" '(ut::assert-equal '(1 2 3 4 5 6 7 8 9 10) (quick-sort-by '(10 9 8 7 6 5 4 3 2 1) (lambda (a b) (> a b))))) +(ut::define-test "result of (quick-sort-by (1 2 3 4 5 6 7 8 9 10) (lambda (a b) (> a b)))" '(ut::assert-equal '(1 2 3 4 5 6 7 8 9 10) (quick-sort-by '(1 2 3 4 5 6 7 8 9 10) (lambda (a b) (> a b))))) +(ut::define-test "result of (quick-sort-by (1 2 3 4 5 6 7 8 9 10) (lambda (a b) (< a b)))" '(ut::assert-equal '(10 9 8 7 6 5 4 3 2 1) (quick-sort-by '(1 2 3 4 5 6 7 8 9 10) (lambda (a b) (< a b))))) + +(ut::define-test "result of (len (parse-csv (read-file \"tests/data.csv\")))" '(ut::assert-equal 2 (len (parse-csv (read-file "tests/data.csv"))))) + +(ut::define-test "result of (string-rtrim \"abc \")" '(ut::assert-equal "abc" (string-rtrim "abc "))) +(ut::define-test "result of (string-ltrim \" abc\")" '(ut::assert-equal "abc" (string-ltrim " abc"))) +(ut::define-test "result of (string-trim \" abc \")" '(ut::assert-equal "abc" (string-trim " abc "))) +(ut::define-test "result of (string-regex? \"test.lsp\" \"^.*\.l(i)?sp$\")" '(ut::assert-equal 1 (string-regex? "test.lsp" "^.*\.l(i)?sp$"))) + +(ut::define-test "result of (string-split \"split me by space\" \"\\s+\")" '(ut::assert-equal '("split" "me" "by" "space") (string-split "split me by space" "\\s+"))) +(ut::define-test "result of (string-upcase \"abcABCD\")" '(ut::assert-equal "ABCABCD" (string-upcase "abcABCD"))) +(ut::define-test "result of (string-downcase \"abcABCD\")" '(ut::assert-equal "!abcabcd" (string-downcase "abcABCD"))) + +(ut::define-test "result of (write-file \"/tmp/file\" \"write-file test\")" '(ut::assert-equal 1 (write-file "/tmp/file" "write-file test\n"))) +(ut::define-test "result of (is-file? \"/tmp/file\")" '(ut::assert-true (is-file? "/tmp/file"))) +(ut::define-test "result of (is-file? \"/tmp/file_whichnotex_ists\")" '(ut::assert-false (is-file? "/tmp/file_whichnotex_ists"))) +(ut::define-test "result of (is-dir? \"/tmp/file_whichnotex_ists\")" '(ut::assert-false (is-dir? "/tmp/file_whichnotex_ists"))) +(ut::define-test "result of (is-dir? \"/tmp\"" '(ut::assert-true (is-dir? "/tmp"))) + +(ut::define-test "result of (str-to-date \"01.01.1970\" \"%d.%m.%Y\")" '(ut::assert-equal 0 (str-to-date "01.01.1970" "%d.%m.%Y"))) +(ut::define-test "result of (date-add (str-to-date \"01.01.1970\" \"%d.%m.%Y\") 1 \"day\")" '(ut::assert-equal 86400 (date-add (str-to-date "01.01.1970" "%d.%m.%Y") 1 "day"))) + +(ut::define-test "result of (uniq '(1 2 2 2 3 4 5 4 4 1 2 2 2 3 4 5 4 4 61 2 2 2 3 4 5 4 4 66))" '(ut::assert-equal '(1 2 3 4 5 61 66) (uniq '(1 2 2 2 3 4 5 4 4 1 2 2 2 3 4 5 4 4 61 2 2 2 3 4 5 4 4 66)))) +(ut::define-test "result of (flatten '(1 2 (3 3 (4)) 5 6))" '(ut::assert-equal '(1 2 3 3 4 5 6) (flatten (1 2 (3 3 (4)) 5 6)))) + +(ut::define-test "result of (sprintf \"%.2f\" '(1.25))" '(ut::assert-equal "1.25" (sprintf "%.2f" '(1.25)))) +(ut::define-test "result of (sprintf \"%.2f\" '(1.23456))" '(ut::assert-equal "1.23" (sprintf "%.2f" '(1.23456)))) +(ut::define-test "result of (sprintf \"%.d\" '(10000000))" '(ut::assert-equal "10000000" (sprintf "%.d" '(10000000)))) + +(ut::define-test "result of (get-env \"HOME\")" '(ut::assert-equal "/Users/vaclavt" (get-env "HOME"))) + +;(ut::define-test "result of " '(ut::assert-true ) +(ut::run-tests) +;; (include "/usr/local/var/mlisp/terminal.lsp") -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; to create test file with json -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; (define curl "curl -H \"Accept: application/json, text/plain, */*\" -H \"Origin: https://www.nasdaq.com/\" -H \"User-Agent: Mozilla/5.0 (Windows NT 10.0)\" https://api.nasdaq.com/api/calendar/dividends/?date=2021-02-01 2>/dev/null") -; (define curl_out (system-cmd curl)) -; (write-file "tests/json_data.json" (last curl_out)) -; (define json_list (parse-json (last curl_out))) +;; (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") -(define json_list (parse-json (read-file "tests/json_data.json"))) +;; (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))) " " +;; )) - -(define data (first json_list)) -(define calendar (index data 1)) -(define calendar_data (index (index calendar 0) 1)) -(define header (index (index calendar_data 0) 1)) -(define rows (index (index calendar_data 1) 1)) -(define csv_list '()) -(for e rows - ; (("announcement_Date" "01/07/2021") ("companyName" "Itau Unibanco Banco Holding SA") ("dividend_Ex_Date" "02/01/2021") ("dividend_Rate" 0.003) ("indicated_Annual_Dividend" 0.033) ("payment_Date" "03/11/2021") ("record_Date" "02/02/2021") ("symbol" "ITUB")) - (define symbol (second (first (filter (lambda (x) (= (first x) "symbol")) e)))) - (define divrate (second (first (filter (lambda (x) (= (first x) "dividend_Rate")) e)))) - (define adate (second (first (filter (lambda (x) (= (first x) "announcement_Date")) e)))) - (define name (second (first (filter (lambda (x) (= (first x) "companyName")) e)))) - (define edate (second (first (filter (lambda (x) (= (first x) "dividend_Ex_Date")) e)))) - (define pdate (second (first (filter (lambda (x) (= (first x) "payment_Date")) e)))) - (define rdate (second (first (filter (lambda (x) (= (first x) "record_Date")) e)))) - - (define csv_list (push csv_list (list symbol edate pdate divrate))) - 1) - - -(print (make-csv csv_list)) - - - -(print (ls-dir "/tmp")) -(write-file "/tmp/file" "write-file test\n") -(print (is-file? "/tmp/file")) -(print (is-file? "/tmp/file_not_exists")) -(print (is-dir? "/tmp")) - -(print (get-universal-time)) -(print (date-to-str (get-universal-time) "%d.%m.%Y")) -(print (str-to-date "01.01.1970" "%d.%m.%Y")) -(print (date-add (str-to-date "01.01.1970" "%d.%m.%Y") 1 "day")) - -(print (string-regex? "test.lsp" "^.*\.l(i)?sp$")) - - -(if (> 2 1) - (print "2 > 1")) - -(if (> 2 10) - (print "2 > 10")) - - - - - -(define csv_list '()) -(for f (ls-dir "tests/divi") - (if (string-regex? f "^divi.*\.csv$") - (do - (define filename (+ "tests/divi/" f)) - ; (print filename) - (define csv_str (read-file filename)) - (define csv_file_list (parse-csv csv_str)) - (define csv_list (+ csv_list csv_file_list)) - ) - )) - -;; (for x csv_list (print x)) - -(print "(len csv_list) : " (len csv_list)) - -(define my_tickers '("WFC" "AIG")) - -; (print (filter (lambda (x) (= (first x) "CLX")) csv_list)) -(print (filter (lambda (x) (member my_tickers (first x))) csv_list)) - -(define l '(1 2 2 2 3 4 5 4 4 1 2 2 2 3 4 5 4 4 61 2 2 2 3 4 5 4 4 66)) -(print "list:" l) -(print "uniq-ed list:" (uniq l)) - -(define l '(1 2 (3 3 (4)) 5 6)) -(print "list:" l) -(print "flatten-ed list:" (flatten l)) - -(print (sprintf "%.2f" (list 1.25))) - -(print (sprintf "%.2f" '(1.23456))) -(print (sprintf "%d" '(10000000))) - -(define q 1.23) -(print (sprintf "%.2f" (list q))) - -(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))) " " - )) - -(print (get-env "HOME")) - - -(print (string-rtrim "abc ")) -(print (string-ltrim " abc")) -(print (string-trim " abc ")) - - -(print "Test ends") \ No newline at end of file