File: regex.lisp

package info (click to toggle)
cl-metabang-bind 20230508.git0819642-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 244 kB
  • sloc: lisp: 1,607; makefile: 2
file content (79 lines) | stat: -rw-r--r-- 2,238 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
(in-package #:metabang-bind-test)

#+(or)
(run-tests :suite 'test-regex)


(deftestsuite test-regex (metabang-bind-test)
  ()
  (:equality-test #'equalp))

(addtest (test-regex)
  simple-bind
  (ensure-same
   (bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
		fname lname date month year) "Frank Zappa 21.12.1940"))
     (list fname lname date month year))
   (list "Frank" "Zappa" "21" "12" "1940")))

(addtest (test-regex)
  nils-are-ignored-1
  (ensure-same
   (bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
		fname lname nil month year) "Frank Zappa 21.12.1940"))
     (list fname lname month year))
   (list "Frank" "Zappa" "12" "1940")))

(addtest (test-regex)
  nils-are-ignored-2
  (ensure-same
   (bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
		nil lname nil month year) "Frank Zappa 21.12.1940"))
     (list lname month year))
   (list "Zappa" "12" "1940")))

#+(or)
(addtest (test-regex)
  nils-are-ignored-1
  (let ((result 
	 (lambda ()
	   (bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
			fname lname nil month year) "Frank Zappa 21.12.1940"))
	     (list lname month year)))))
    (ensure-same (funcall result)
		 (list "Zappa" "12" "1940"))
    (ensure-warning
      (compile 
       nil
       (lambda ()
	 (bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
		      fname lname nil month year) "Frank Zappa 21.12.1940"))
	   (list lname month year)))))))

(addtest (test-regex)
  executes-when-no-bindings
  (ensure-same
   (bind (((:re "(a|b)+" first) "cccc"))
     (list "still seen" first))
   (list "still seen" nil)))

#+(or)
(addtest (test-regex)
  you-can-use-doit
  (ensure-same
   (bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
			fname lname nil month year) 
	   "Frank Zappa 21.12.1940"))
     (flet ((doit (&rest vars)
	      (reverse vars)))
       (doit fname lname month year)))
   (reverse (list "Frank" "Zappa" "12" "1940"))))

#+(or)
(defun xxx ()
  (let ((result 
	 '(lambda ()
	   (bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
			nil lname nil month year) "Frank Zappa 21.12.1940"))
	     (list lname month year)))))
  (compile nil result)))