Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 56s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
69 lines
2.0 KiB
Plaintext
69 lines
2.0 KiB
Plaintext
;; Extension — document statistics.
|
|
|
|
(st-bootstrap-classes!)
|
|
(content/bootstrap!)
|
|
(content-bootstrap-text!)
|
|
(content-bootstrap-section!)
|
|
|
|
;; ── empty doc ──
|
|
(define e (doc-empty "e"))
|
|
(content-test "empty words" (content/word-count e) 0)
|
|
(content-test "empty chars" (content/char-count e) 0)
|
|
(content-test "empty blocks" (content/block-count e) 0)
|
|
(content-test "empty reading" (content/reading-minutes e) 0)
|
|
(content-test "empty stats" (content/stats e) {:blocks 0 :reading-minutes 0 :words 0 :chars 0})
|
|
|
|
;; ── simple doc ──
|
|
(define
|
|
d
|
|
(doc-append
|
|
(doc-append (doc-empty "d") (mk-heading "h" 1 "Hello World"))
|
|
(mk-text "p" "one two three")))
|
|
(content-test "word count" (content/word-count d) 5)
|
|
(content-test
|
|
"char count"
|
|
(content/char-count d)
|
|
(string-length "Hello World one two three"))
|
|
(content-test "block count" (content/block-count d) 2)
|
|
(content-test "reading rounds up" (content/reading-minutes d) 1)
|
|
|
|
;; ── reading time at 0 vs 1 word ──
|
|
(content-test
|
|
"one word one minute"
|
|
(content/reading-minutes (doc-append (doc-empty "d") (mk-text "p" "hi")))
|
|
1)
|
|
|
|
;; ── block count includes nested section children ──
|
|
(define
|
|
nested
|
|
(doc-append
|
|
(doc-empty "d")
|
|
(mk-section
|
|
"s"
|
|
(list (mk-heading "nh" 1 "A") (mk-text "np" "b c")))))
|
|
(content-test
|
|
"block count counts section + children"
|
|
(content/block-count nested)
|
|
3)
|
|
(content-test
|
|
"word count descends into section"
|
|
(content/word-count nested)
|
|
3)
|
|
|
|
;; ── deep nesting ──
|
|
(define
|
|
deep
|
|
(doc-append
|
|
(doc-empty "d")
|
|
(mk-section
|
|
"o"
|
|
(list (mk-text "a" "x") (mk-section "i" (list (mk-text "b" "y z")))))))
|
|
(content-test "deep block count" (content/block-count deep) 4)
|
|
(content-test "deep word count" (content/word-count deep) 3)
|
|
|
|
;; ── stats dict shape ──
|
|
(define s (content/stats d))
|
|
(content-test "stats words" (get s :words) 5)
|
|
(content-test "stats blocks" (get s :blocks) 2)
|
|
(content-test "stats has reading" (get s :reading-minutes) 1)
|