File: setx.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 (54 lines) | stat: -rw-r--r-- 1,171 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
48
49
50
51
52
53
54
(import pytest)

(defn test-setx []
  (setx y (+ (setx x (+ "a" "b")) "c"))
  (assert (= x "ab"))
  (assert (= y "abc"))

  (setv l [])
  (for [x [1 2 3]]
    (when (>= (setx y (+ x 8)) 10)
      (.append l y)))
  (assert (= l [10 11]))

  (setv a ["apple" None "banana"])
  (setv filtered (lfor
    i (range (len a))
    :if (is-not (setx v (get a i)) None)
    v))
  (assert (= filtered ["apple" "banana"]))
  (assert (= v "banana"))
  (with [(pytest.raises NameError)]
    i))

(defn test-setx-generator-scope []
  ;; https://github.com/hylang/hy/issues/1994
  (setv x 20)
  (lfor n (range 10) (setx x n))
  (assert (= x 9))

  (setv x 20)
  (lfor n (range 10) :do x (setx x n))  ; force making a function
  (assert (= x 9))

  (lfor n (range 10) :do x (setx y n))
  (assert (= y 9))

  (lfor n (range 0) :do x (setx y n))
  (with [(pytest.raises NameError)]
    n)

  (lfor n (range 0) :setv t (+ n 2) (setx y n))
  (with [(pytest.raises NameError)]
    t)

  (lfor n (range 0) :do x (setx z n))
  (with [(pytest.raises UnboundLocalError)]
    z))

(defn test-let-setx []
  (let [x 40
        y 13]
    (setv y (setx x 2))
    (assert (= x 2))
    (assert (= y 2))))