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

111 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[← Обратно към индекса](index.md)
---
# Съвместимост с Clojure Test Suite
Clojure/Nim участва в между-диалектния **[jank-lang/clojure-test-suite](https://github.com/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. Клониране на тестовия пакет
```bash
git clone https://github.com/jank-lang/clojure-test-suite.git /tmp/clojure-test-suite
```
### 2. Пускане на индивидуални тестове
Използвайте `test_single.py` за пускане на конкретен тестов файл:
```bash
python3 test_single.py /tmp/clojure-test-suite/test/clojure/core_test/nil_qmark.cljc
```
### 3. Пускане на пакет
```bash
python3 test_single.py
# Пуска: zipmap, zero_qmark, with_out_str
```
Редактирайте файла `test_single.py`, за да добавите още тестови файлове към списъка.
## Формат на тестовете
Всеки тестов файл е `.cljc` (cross-platform Clojure/ClojureScript) файл със стандартна структура:
```clojure
(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` клона:
```clojure
;; Преди
#?(:cljs :refer-macros :default :refer)
;; След
:refer
;; Преди
#?@(:cljs [] :default [1 2 3])
;; След
[1 2 3]
```
Това следва стандартната между-диалектна конвенция — всеки диалект разрешава `:default` според своята платформа.
## Текущ обхват на тестовете
Тестовият пакет покрива **212+ функции от `clojure.core`** и **8 функции от `clojure.string`**. Clojure/Nim работи към пълно съответствие.
Вижте [Roadmap](06-roadmap.md) за статуса на имплементацията.
---
## Настройка на тестове за отделните диалекти
За справка, ето линкове към официалните ръководства за настройка на тестовете за други платформи:
| Диалект | Ръководство за настройка |
|---------|--------------------------|
| Clojure (JVM) | [clojure.md](https://github.com/jank-lang/clojure-test-suite/blob/main/doc/clojure.md) |
| ClojureScript | [clojurescript.md](https://github.com/jank-lang/clojure-test-suite/blob/main/doc/clojurescript.md) |
| Babashka | [babashka.md](https://github.com/jank-lang/clojure-test-suite/blob/main/doc/babashka.md) |
| Clojure CLR | [clojureclr.md](https://github.com/jank-lang/clojure-test-suite/blob/main/doc/clojureclr.md) |
| Basilisp | [basilisp.md](https://github.com/jank-lang/clojure-test-suite/blob/main/doc/basilisp.md) |
| **Clojure/Nim** | **Този документ** |
---
*Последно обновено: 2026-05-09*