source: project/release/5/string-utils/trunk/tests/string-utils-test.scm

Last change on this file was 37679, checked in by Kon Lovett, 3 months ago

fix string-interpolation (per #<#TAG)

File size: 3.9 KB
Line 
1;;;; string-utils-test.scm  -*- Scheme -*-
2;;;; Kon Lovett, Jul '18
3;;;; Kon Lovett, Oct '17
4
5(import test)
6
7(test-begin "String Utils")
8
9;;;
10
11(import unicode-utils to-hex string-hexadecimal)
12
13(test-group "Unicode"
14  (test-assert (ascii-codepoint? #\a))
15  (test "abc" (unicode-string #\a #\b #\c))
16  (test "cebb" (string->hex (unicode-char->string #\U03BB)))
17  (test "cebbcebbcebb" (string->hex (unicode-string #\U03BB #\U03BB #\U03BB)))
18  (test "cebbcebb" (string->hex (unicode-make-string 2 #\U03BB)))
19)
20
21(import memoized-string)
22
23(test-group "Memoized"
24  (test "a" (make-string+ 1 #\a))
25  (define a5 (make-string+ 5 #\a))
26  (test "aaaaa" a5)
27  (define spc5 (make-string+ 5))
28  (test "     " spc5)
29  (test-assert (eq? a5 (make-string+ 5 #\a)))
30  (test-assert (eq? spc5 (make-string+ 5 #\space)))
31  (define tststr1 (string+ #\我 #\䜠))
32  (test "(string+ #\\我 #\\䜠)" tststr1 "我䜠")
33  (test-assert (eq? tststr1 (string+ #\我 #\䜠)))
34  (define tststr2 "䞊海的䞜西埈䟿宜")
35  (test-assert (eq? tststr2 (global-string tststr2)))
36)
37
38(import string-hexadecimal (chicken blob) (srfi 4))
39
40(test-group "To Hex"
41        (let ((t (make-string (* 2 3))))
42                (blob_to_hex t (string->blob "12abc34") 2 5)
43                (test "616263" t) )
44  ;
45        (let ((t (make-string (* 2 3))))
46                (u8vec_to_hex t (u8vector 1 2 #x61 #x62 #x63 3 4) 2 5)
47                (test "616263" t) )
48  ;
49        (let ((t (make-string (* 2 2))))
50                (s8vec_to_hex t (s8vector 1 2 -45 -54 3 4) 2 4)
51                (test "d3ca" t) )
52)
53
54(test-group "String -> Hex"
55        (test "616263" (string->hex "12abc34" 2 5))
56        (test "414243444546" (string->hex "ABCDEF"))
57        (test "4243444546" (string->hex "ABCDEF" 1))
58        (test "4243" (string->hex "ABCDEF" 1 3))
59)
60
61(test-group "Hex -> String"
62        (test "abc" (hex->string "616263"))
63        (test "ABCDEF" (hex->string "414243444546"))
64        (test "BCDEF" (hex->string "4243444546"))
65        (test "BC" (hex->string "4243"))
66        (test "jkL]" (hex->string "6a6B4c5D"))
67        (test-error (hex->string "424"))
68)
69
70;;
71
72(import string-interpolation)
73
74(test-group "String Interpolation"
75  (let ((res '(##sys#print-to-string (list "foo " (+ 1 2) " bar"))))
76    (test res (string-interpolate "foo #(+ 1 2) bar"))
77    (test res (string-interpolate "foo #(+ 1 2) bar"))
78    (test res (string-interpolate "foo ${(+ 1 2)} bar" eval-tag: #\$))
79    (test res (string-interpolate "foo $(+ 1 2) bar" eval-tag: #\$)) )
80)
81
82(import (prefix utf8-string-interpolation utf8::))
83
84(test-group "String Interpolation (UTF-8)"
85  (let ((res '(##sys#print-to-string (list "听诎䞊海的 " (+ 1 2) " 䞜西埈莵"))))
86    (test res (utf8::string-interpolate "听诎䞊海的 #(+ 1 2) 䞜西埈莵"))
87    (test res (utf8::string-interpolate "听诎䞊海的 #(+ 1 2) 䞜西埈莵"))
88    (test res (utf8::string-interpolate "听诎䞊海的 ${(+ 1 2)} 䞜西埈莵" eval-tag: #\$))
89    (test res (utf8::string-interpolate "听诎䞊海的 $(+ 1 2) 䞜西埈莵" eval-tag: #\$)) )
90)
91
92(import string-interpolation-syntax (chicken port))
93
94;must be "top level"; cannot be test-group
95(test-begin "String Interpolation SYNTAX")
96  (set-sharp-string-interpolation-syntax string-interpolate)
97  (test
98    '((##sys#print-to-string (list "foo " (+ 1 2) " bar")))
99    (list (call-with-input-string "#\"foo #{(+ 1 2)} bar\"" read)))
100  (set-sharp-string-interpolation-syntax #f)
101
102  (set-sharp-string-interpolation-syntax
103    (cute string-interpolate <> eval-tag: #\$))
104  (test
105    '((##sys#print-to-string (list "foo " (+ 1 2) " bar")))
106    (list (call-with-input-string "#\"foo ${(+ 1 2)} bar\"" read)))
107  (set-sharp-string-interpolation-syntax #f)
108(test-end "String Interpolation SYNTAX")
109
110;;
111
112(import string-utils)
113
114(test-group "string-utils"
115  (test "foo" (string-fixed-length "abcde" 1 #:trailing "foo"))
116  (test "a..." (string-fixed-length "abcde" 4))
117  (test "abc " (string-fixed-length "abc" 4))
118
119  (let ((strs '("foobaz" "foobar" "barbaz" "barfoo" "bazfoo")))
120    (test "foobar" (string-longest-common-prefix "foobarbaz" strs))
121    (test '("ba" "bar" "fooba") (string-longest-common-prefixes strs)) )
122)
123
124;;;
125
126(test-end "String Utils")
127
128(test-exit)
Note: See TracBrowser for help on using the repository browser.