- Fix: = now uses cljEqual/cljMultiEqual instead of numeric-only cljNumEq, so (= :a :a), (= "a" "a"), (= [1 2] [1 2]), (= nil nil) etc return true - Fix: ns forms inside unwrapped (do ...) are skipped instead of emitting broken Nim comments inside cljRepr() - Fix: defmacro forms go to defs section, not wrapped in discard cljRepr() - Add 18 type predicates: keyword?, symbol?, string?, number?, integer?, float?, vector?, map?, set?, list?, seq?, coll?, sequential?, fn?, boolean?, true?, false?, some? - Add collection fns: second, ffirst, nfirst, peek, pop - Add keyword/symbol ops: keyword, symbol, name, namespace, key, val - Update eval interpreter = to handle structural collection equality - Add test_single.py + test_vals.clj for Clojure test suite runner - Add docs/en/07 and docs/bg/07 for cross-dialect test suite compatibility - Update README with test suite documentation link
4.2 KiB
Съвместимост с Clojure Test Suite
Clojure/Nim участва в между-диалектния jank-lang/clojure-test-suite — стандартният Clojure тестови пакет за съответствие, който валидира поведението на всички Clojure диалекти.
Поддържани диалекти
Clojure Test Suite се поддържа официално за следните диалекти:
| Диалект | Статус | Runtime |
|---|---|---|
| Clojure (JVM) | ✅ Официален | JVM |
| ClojureScript | ✅ Официален | JavaScript / Node.js |
| Babashka | ✅ Официален | GraalVM native-image |
| Clojure CLR | ✅ Официален | .NET CLR |
| Basilisp | ✅ Официален | Python |
| Clojure/Nim | 🚀 Кандидат | Nim → C → Native |
Бърз старт
1. Клониране на тестовия пакет
git clone https://github.com/jank-lang/clojure-test-suite.git /tmp/clojure-test-suite
2. Пускане на индивидуални тестове
Използвайте test_single.py за пускане на конкретен тестов файл:
python3 test_single.py /tmp/clojure-test-suite/test/clojure/core_test/nil_qmark.cljc
3. Пускане на пакет
python3 test_single.py
# Пуска: zipmap, zero_qmark, with_out_str
Редактирайте файла test_single.py, за да добавите още тестови файлове към списъка.
Формат на тестовете
Всеки тестов файл е .cljc (cross-platform Clojure/ClojureScript) файл със стандартна структура:
(ns clojure.core-test.nil-qmark
(:require [clojure.test :as t :refer [are deftest is testing]]
[clojure.core-test.portability :refer [when-var-exists]]))
(when-var-exists nil?
(deftest test-nil?
(testing "common"
(are [in ex] (= (nil? in) ex)
nil true
0 false
false false
"" false))))
Обработка на Reader Conditionals
test_single.py на Clojure/Nim предварително обработва .cljc файловете, като премахва #? и #?@ reader conditionals и извлича :default клона:
;; Преди
#?(:cljs :refer-macros :default :refer)
;; След
:refer
;; Преди
#?@(:cljs [] :default [1 2 3])
;; След
[1 2 3]
Това следва стандартната между-диалектна конвенция — всеки диалект разрешава :default според своята платформа.
Текущ обхват на тестовете
Тестовият пакет покрива 212+ функции от clojure.core и 8 функции от clojure.string. Clojure/Nim работи към пълно съответствие.
Вижте Roadmap за статуса на имплементацията.
Настройка на тестове за отделните диалекти
За справка, ето линкове към официалните ръководства за настройка на тестовете за други платформи:
| Диалект | Ръководство за настройка |
|---|---|
| Clojure (JVM) | clojure.md |
| ClojureScript | clojurescript.md |
| Babashka | babashka.md |
| Clojure CLR | clojureclr.md |
| Basilisp | basilisp.md |
| Clojure/Nim | Този документ |
Последно обновено: 2026-05-09