improve db tests

This commit is contained in:
Ryan Culpepper 2012-11-14 18:30:03 -05:00
parent 032e1ebf55
commit 4cdcfd6a3b

View File

@ -147,7 +147,10 @@
(when (string? len-fun)
(check-equal? (query-value c (sql (format "select ~a($1)" len-fun)) str)
(string-length str)
"check server-side length")))
"check server-side length"))))
(define-check (check-1char c str)
(check-varchar c str)
(when (= (string-length str) 1)
;; - if one char, check server-side char->int
(let ([ci-fun (case dbsys
@ -229,6 +232,22 @@
(,(sql-interval -87 -1 0 0 0 0 0) "-87 years -1 mons")
(,(sql-interval -1 -2 3 4 5 6 45000) "-1 years -2 mons +3 days 04:05:06.000045")))
(define some-basic-strings
`("Az0"
"this is the time to remember"
"it's like that (and that's the way it is)"
,(string #\\)
,(string #\\ #\\)
,(string #\')
,(string #\\ #\')
"λ the ultimate"))
(define some-intl-strings
`("αβψδεφγηιξκλμνοπρστθωςχυζ"
"अब्च्देघिज्क्ल्म्नोप्र्स्तुव्य्"
"شﻻؤيثبلاهتنمةىخحضقسفعرصءغئ"
"阿あでいおうわぁ"
"абцдефгхиклмнопљрстувњџзѕЋч"))
(define test
(test-suite "SQL types (roundtrip, etc)"
(type-test-case '(bool boolean)
@ -337,33 +356,21 @@
(lambda (c)
(unless (ANYFLAGS 'isora) ;; Oracle treats empty string as NULL (?!)
(check-varchar c ""))
(check-varchar c "Az0")
(check-varchar c (string #\\))
(check-varchar c (string #\\ #\\))
(check-varchar c (string #\'))
(check-varchar c "this is the time to remember")
(check-varchar c "it's like that (and that's the way it is)")
(check-varchar c (string #\\))
(check-varchar c (string #\'))
(check-varchar c (string #\\ #\'))
(check-varchar c "λ the ultimate")
(for ([str some-basic-strings])
(check-varchar c str))
(for ([str some-intl-strings])
(check-varchar c str)
;; and do the extra one-char checks:
(check-1char c (substring str 0 1)))
(unless (ANYFLAGS 'isora 'isdb2)
(check-varchar c (make-string 800 #\a)))
(let ([strs '("αβψδεφγηιξκλμνοπρστθωςχυζ"
"अब्च्देघिज्क्ल्म्नोप्र्स्तुव्य्"
"شﻻؤيثبلاهتنمةىخحضقسفعرصءغئ"
"阿あでいおうわぁ"
"абцдефгхиклмнопљрстувњџзѕЋч")])
(for ([s strs])
(check-varchar c s)
;; and do the extra one-char checks:
(check-varchar c (string (string-ref s 0))))
(unless (ANYFLAGS 'isora 'isdb2) ;; too long
(check-varchar c (apply string-append strs))))
(unless (ANYFLAGS 'isora 'isdb2) ;; too long
(check-varchar c (apply string-append some-intl-strings)))
;; one-char checks
(check-varchar c (string #\λ))
(check-varchar c (make-string 1 #\u2200))
(check-1char c (string #\λ))
(check-1char c (make-string 1 #\u2200))
(check-varchar c (make-string 20 #\u2200))
;; check large strings
(unless (ANYFLAGS 'isora 'isdb2) ;; too long (???)
(check-varchar c (make-string 100 #\u2200)))
;; Following might not produce valid string (??)