Files
bara-lang/docs/bg/07-clojure-test-suite.md
T
dimgigov a9ad83c509 fix: general equality (=) for all types, add type predicates & collection fns, test suite docs
- 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
2026-05-09 12:17:10 +03:00

4.2 KiB
Raw Blame History

← Обратно към индекса


Съвместимост с 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