104 lines
2.6 KiB
Hy
104 lines
2.6 KiB
Hy
;; Copyright 2019 the authors.
|
|
;; This file is part of Hy, which is free software licensed under the Expat
|
|
;; license. See the LICENSE.
|
|
|
|
;; Tests where the emitted code relies on Python ≥3.5.
|
|
;; conftest.py skips this file when running on Python <3.5.
|
|
|
|
(import [asyncio [get-event-loop sleep]])
|
|
|
|
|
|
(defn test-unpacking-pep448-1star []
|
|
(setv l [1 2 3])
|
|
(setv p [4 5])
|
|
(assert (= ["a" #*l "b" #*p #*l] ["a" 1 2 3 "b" 4 5 1 2 3]))
|
|
(assert (= (, "a" #*l "b" #*p #*l) (, "a" 1 2 3 "b" 4 5 1 2 3)))
|
|
(assert (= #{"a" #*l "b" #*p #*l} #{"a" "b" 1 2 3 4 5}))
|
|
(defn f [&rest args] args)
|
|
(assert (= (f "a" #*l "b" #*p #*l) (, "a" 1 2 3 "b" 4 5 1 2 3)))
|
|
(assert (= (+ #*l #*p) 15))
|
|
(assert (= (and #*l) 3)))
|
|
|
|
|
|
(defn test-unpacking-pep448-2star []
|
|
(setv d1 {"a" 1 "b" 2})
|
|
(setv d2 {"c" 3 "d" 4})
|
|
(assert (= {1 "x" #**d1 #**d2 2 "y"} {"a" 1 "b" 2 "c" 3 "d" 4 1 "x" 2 "y"}))
|
|
(defn fun [&optional a b c d e f] [a b c d e f])
|
|
(assert (= (fun #**d1 :e "eee" #**d2) [1 2 3 4 "eee" None])))
|
|
|
|
|
|
(defn run-coroutine [coro]
|
|
"Run a coroutine until its done in the default event loop."""
|
|
(.run_until_complete (get-event-loop) (coro)))
|
|
|
|
|
|
(defn test-fn/a []
|
|
(assert (= (run-coroutine (fn/a [] (await (sleep 0)) [1 2 3]))
|
|
[1 2 3])))
|
|
|
|
|
|
(defn test-defn/a []
|
|
(defn/a coro-test []
|
|
(await (sleep 0))
|
|
[1 2 3])
|
|
(assert (= (run-coroutine coro-test) [1 2 3])))
|
|
|
|
|
|
(defn test-decorated-defn/a []
|
|
(defn decorator [func] (fn/a [] (/ (await (func)) 2)))
|
|
|
|
#@(decorator
|
|
(defn/a coro-test []
|
|
(await (sleep 0))
|
|
42))
|
|
(assert (= (run-coroutine coro-test) 21)))
|
|
|
|
|
|
(defclass AsyncWithTest []
|
|
(defn --init-- [self val]
|
|
(setv self.val val)
|
|
None)
|
|
|
|
(defn/a --aenter-- [self]
|
|
self.val)
|
|
|
|
(defn/a --aexit-- [self tyle value traceback]
|
|
(setv self.val None)))
|
|
|
|
|
|
(defn test-single-with/a []
|
|
(run-coroutine
|
|
(fn/a []
|
|
(with/a [t (AsyncWithTest 1)]
|
|
(assert (= t 1))))))
|
|
|
|
(defn test-two-with/a []
|
|
(run-coroutine
|
|
(fn/a []
|
|
(with/a [t1 (AsyncWithTest 1)
|
|
t2 (AsyncWithTest 2)]
|
|
(assert (= t1 1))
|
|
(assert (= t2 2))))))
|
|
|
|
(defn test-thrice-with/a []
|
|
(run-coroutine
|
|
(fn/a []
|
|
(with/a [t1 (AsyncWithTest 1)
|
|
t2 (AsyncWithTest 2)
|
|
t3 (AsyncWithTest 3)]
|
|
(assert (= t1 1))
|
|
(assert (= t2 2))
|
|
(assert (= t3 3))))))
|
|
|
|
(defn test-quince-with/a []
|
|
(run-coroutine
|
|
(fn/a []
|
|
(with/a [t1 (AsyncWithTest 1)
|
|
t2 (AsyncWithTest 2)
|
|
t3 (AsyncWithTest 3)
|
|
_ (AsyncWithTest 4)]
|
|
(assert (= t1 1))
|
|
(assert (= t2 2))
|
|
(assert (= t3 3))))))
|