File: eval_foo_compile.hy

package info (click to toggle)
hy 1.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,632 kB
  • sloc: python: 7,299; makefile: 38; sh: 27
file content (47 lines) | stat: -rw-r--r-- 956 bytes parent folder | download | duplicates (2)
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
;; Tests of `eval-when-compile`, `eval-and-compile`, and `do-mac`


(defn test-eval-foo-compile-return-values []
  (eval-and-compile (setv jim 0))

  (setv derrick (eval-and-compile (+= jim 1) 2))
  (assert (= jim 1))
  (assert (= derrick 2))

  (setv derrick (eval-and-compile))
  (assert (is derrick None))

  (setv derrick 3)
  (setv derrick (eval-when-compile (+= jim 1) 2))
  (assert (= jim 1))
  (assert (is derrick None)))


(defn test-do-mac []

  (assert (is (do-mac) None))

  (setv x 2)
  (setv x-compile-time (do-mac
    (setv x 3)
    x))
  (assert (= x 2))
  (assert (= x-compile-time 3))

  (eval-when-compile (setv x 4))
  (assert (= x 2))
  (assert (= (do-mac x) 4))

  (defmacro m []
    (global x)
    (setv x 5))
  (m)
  (assert (= x 2))
  (assert (= (do-mac x) 5))

  (setv l [])
  (do-mac `(do ~@(* ['(.append l 1)] 5)))
  (assert (= l [1 1 1 1 1]))

  (do-mac `(setv ~(hy.models.Symbol (* "x" 5)) "foo"))
  (assert (= xxxxx "foo")))