Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 32s
gensym_counter ref + gensym/string->symbol/symbol->string/intern/symbol-interned? primitives in sx_primitives.ml. Fix ListRef case in seq_to_list on both sx_ref.ml and sx_primitives.ml. 19 new tests in test-gensym.sx. OCaml 4450/1080, JS 2205/2497, zero regressions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
79 lines
2.6 KiB
Plaintext
79 lines
2.6 KiB
Plaintext
(defsuite
|
|
"gensym"
|
|
(deftest "gensym returns a symbol" (assert= true (symbol? (gensym))))
|
|
(deftest
|
|
"gensym default prefix is g"
|
|
(let
|
|
((s (symbol-name (gensym))))
|
|
(assert= true (string-contains? s "g"))))
|
|
(deftest
|
|
"gensym with prefix uses that prefix"
|
|
(let
|
|
((s (symbol-name (gensym "var"))))
|
|
(assert= "var" (substring s 0 3))))
|
|
(deftest
|
|
"gensym produces unique symbols"
|
|
(let
|
|
((a (gensym)) (b (gensym)))
|
|
(assert= false (= (symbol-name a) (symbol-name b)))))
|
|
(deftest
|
|
"gensym same prefix produces unique symbols"
|
|
(let
|
|
((a (gensym "x")) (b (gensym "x")) (c (gensym "x")))
|
|
(assert= false (= (symbol-name a) (symbol-name b)))
|
|
(assert= false (= (symbol-name b) (symbol-name c)))))
|
|
(deftest
|
|
"gensym counter increases: names differ"
|
|
(let
|
|
((a (gensym "k")) (b (gensym "k")))
|
|
(assert= false (= (symbol-name a) (symbol-name b)))))
|
|
(deftest
|
|
"gensym no-arg and prefix-arg both unique"
|
|
(let
|
|
((a (gensym)) (b (gensym "g")))
|
|
(assert= false (= (symbol-name a) (symbol-name b)))))
|
|
(deftest
|
|
"string->symbol returns a symbol"
|
|
(assert= true (symbol? (string->symbol "hello"))))
|
|
(deftest
|
|
"string->symbol symbol has correct name"
|
|
(assert= "hello" (symbol-name (string->symbol "hello"))))
|
|
(deftest
|
|
"string->symbol empty string"
|
|
(assert= true (symbol? (string->symbol ""))))
|
|
(deftest
|
|
"symbol->string returns a string"
|
|
(assert= true (string? (symbol->string (quote foo)))))
|
|
(deftest
|
|
"symbol->string round-trips with string->symbol"
|
|
(assert= "hello" (symbol->string (string->symbol "hello"))))
|
|
(deftest
|
|
"string->symbol/symbol->string round-trip"
|
|
(let
|
|
((sym (string->symbol "my-var")))
|
|
(assert= "my-var" (symbol->string sym))))
|
|
(deftest
|
|
"intern returns a symbol"
|
|
(assert= true (symbol? (intern "foo"))))
|
|
(deftest
|
|
"intern same as string->symbol"
|
|
(assert= "bar" (symbol-name (intern "bar"))))
|
|
(deftest
|
|
"symbol-interned? true for literal symbols"
|
|
(assert= true (symbol-interned? (quote hello))))
|
|
(deftest
|
|
"symbol-interned? true for gensym'd symbol"
|
|
(assert= true (symbol-interned? (gensym "g"))))
|
|
(deftest
|
|
"symbol-interned? true for string->symbol"
|
|
(assert= true (symbol-interned? (string->symbol "test"))))
|
|
(deftest
|
|
"multiple gensym calls all unique"
|
|
(let
|
|
((syms (map (fn (i) (gensym "t")) (in-range 5))))
|
|
(let
|
|
((names (map symbol-name syms)))
|
|
(let
|
|
((unique-names (reduce (fn (acc n) (if (some (fn (x) (= x n)) acc) acc (cons n acc))) (list) names)))
|
|
(assert-equal 5 (len unique-names)))))))
|