Commit | Line | Data |
---|---|---|
025f75b4 MV |
1 | ;;;; format.test --- test suite for Guile's CL-ish format -*- scheme -*- |
2 | ;;;; Matthias Koeppe <mkoeppe@mail.math.uni-magdeburg.de> --- June 2001 | |
3 | ;;;; | |
6e7d5622 | 4 | ;;;; Copyright (C) 2001, 2003, 2004, 2006 Free Software Foundation, Inc. |
025f75b4 MV |
5 | ;;;; |
6 | ;;;; This program is free software; you can redistribute it and/or modify | |
7 | ;;;; it under the terms of the GNU General Public License as published by | |
8 | ;;;; the Free Software Foundation; either version 2, or (at your option) | |
9 | ;;;; any later version. | |
10 | ;;;; | |
11 | ;;;; This program is distributed in the hope that it will be useful, | |
12 | ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | ;;;; GNU General Public License for more details. | |
15 | ;;;; | |
16 | ;;;; You should have received a copy of the GNU General Public License | |
17 | ;;;; along with this software; see the file COPYING. If not, write to | |
92205699 MV |
18 | ;;;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
19 | ;;;; Boston, MA 02110-1301 USA | |
025f75b4 | 20 | |
8ab3d8a0 KR |
21 | (define-module (test-format) |
22 | #:use-module (test-suite lib) | |
23 | #:use-module (ice-9 format)) | |
24 | ||
025f75b4 MV |
25 | |
26 | ;;; FORMAT Basic Output | |
27 | ||
28 | (with-test-prefix "format basic output" | |
29 | (pass-if "format ~% produces a new line" | |
30 | (string=? (format "~%") "\n")) | |
31 | (pass-if "format ~& starts a fresh line" | |
32 | (string=? (format "~&abc~&~&") "abc\n")) | |
33 | (pass-if "format ~& is stateless but works properly across outputs via port-column" | |
34 | (string=? | |
35 | (with-output-to-string | |
36 | (lambda () | |
37 | (display "xyz") | |
38 | (format #t "~&abc") | |
39 | (format #f "~&") ; shall have no effect | |
40 | (format #t "~&~&"))) | |
6c61859f MV |
41 | "xyz\nabc\n")) |
42 | (pass-if "format ~F (format-out-substr) maintains the column correctly" | |
43 | (= (string-length (format "~@F~20T" 1)) 20))) | |
4fb31801 | 44 | |
d8b189d2 KR |
45 | ;;; |
46 | ;;; misc | |
47 | ;;; | |
48 | ||
49 | (with-test-prefix "format" | |
50 | ||
51 | ;; in guile 1.6.4 and earlier, excess arguments were an error, but this | |
52 | ;; changed to follow the common lisp spec | |
53 | (pass-if "excess arguments ignored A" | |
54 | (string=? (format #f "" 1 2 3 4) "")) | |
55 | (pass-if "excess arguments ignored B" | |
56 | (string=? (format #f "~a ~a" 1 2 3 4) "1 2"))) | |
57 | ||
992b375d KR |
58 | ;;; |
59 | ;;; ~d | |
60 | ;;; | |
61 | ||
62 | (with-test-prefix "~d decimal integer" | |
63 | ||
64 | (with-test-prefix "~@d" | |
65 | ||
66 | (pass-if "-1" | |
67 | (string=? (format #f "~@d" -1) "-1")) | |
d8b189d2 | 68 | |
992b375d KR |
69 | ;; in guile 1.6.4 and earlier, ~@d gave "0" but we think "+0" is what the |
70 | ;; common lisp spec intendes | |
71 | (pass-if "+0" | |
72 | (string=? (format #f "~@d" 0) "+0")) | |
73 | ||
74 | (pass-if "+1" | |
75 | (string=? (format #f "~@d" 1) "+1")))) | |
76 | ||
8ab3d8a0 KR |
77 | ;;; |
78 | ;;; ~f | |
79 | ;;; | |
80 | ||
81 | (with-test-prefix "~f fixed-point" | |
82 | ||
83 | (pass-if "1.5" | |
84 | (string=? "1.5" (format #f "~f" 1.5))) | |
85 | ||
86 | ;; in guile prior to 1.6.9 and 1.8.1, leading zeros were incorrectly | |
87 | ;; stripped, moving the decimal point and giving "25.0" here | |
88 | (pass-if "string 02.5" | |
89 | (string=? "2.5" (format #f "~f" "02.5")))) | |
90 | ||
4fb31801 KR |
91 | ;;; |
92 | ;;; ~{ | |
93 | ;;; | |
94 | ||
95 | (with-test-prefix "~{ iteration" | |
96 | ||
97 | ;; In Guile 1.6.4 and earlier, the maximum iterations parameter defaulted | |
98 | ;; to 100, but it's now like Common Lisp where the default is no limit | |
99 | (pass-if "no arbitrary iteration limit" | |
100 | (= (string-length (format "~{~a~}" (make-list 200 #\b))) 200))) |