| (* Copyright (C) 2019 Free Software Foundation, Inc. *) |
| (* This file is part of GNU Modula-2. |
| |
| GNU Modula-2 is free software; you can redistribute it and/or modify it under |
| the terms of the GNU General Public License as published by the Free |
| Software Foundation; either version 3, or (at your option) any later |
| version. |
| |
| GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY |
| WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| for more details. |
| |
| You should have received a copy of the GNU General Public License along |
| with gm2; see the file COPYING. If not, write to the Free Software |
| Foundation, 51 Franklin Street, Fifth Floor, |
| Boston, MA 02110-1301, USA. *) |
| |
| MODULE format ; (*!m2pim+gm2*) |
| |
| FROM DynamicStrings IMPORT String, ConCat, InitString, EqualArray, KillString, string ; |
| FROM FormatStrings IMPORT Sprintf0, Sprintf1, Sprintf2 ; |
| FROM libc IMPORT exit, printf ; |
| FROM SYSTEM IMPORT ADDRESS, ADR ; |
| |
| |
| (* |
| checkDelete - |
| *) |
| |
| PROCEDURE checkDelete (s: String; a: ARRAY OF CHAR) ; |
| VAR |
| s1 : String ; |
| c1, c2: ADDRESS ; |
| BEGIN |
| c2 := string (s) ; |
| s1 := InitString (a) ; |
| c1 := string (s1) ; |
| IF EqualArray (s, a) |
| THEN |
| printf ("string test passed, '%s' correcly seen '%s'\n", c1, c2) |
| ELSE |
| printf ("string test failed, expecting '%s' and seen '%s'\n", c1, c2) ; |
| r := 1 ; |
| END ; |
| s1 := KillString (s1) ; |
| s := KillString (s) ; |
| END checkDelete ; |
| |
| |
| (* |
| test - |
| *) |
| |
| PROCEDURE test ; |
| VAR |
| s : String ; |
| i, j: INTEGER ; |
| ch : CHAR ; |
| BEGIN |
| s := Sprintf0 (InitString ("abc")) ; |
| checkDelete (s, "abc") ; |
| s := Sprintf0 (InitString ("%%")) ; |
| checkDelete (s, "%") ; |
| s := Sprintf0 (InitString ("%%%%")) ; |
| checkDelete (s, "%%") ; |
| s := Sprintf0 (InitString ("%z")) ; |
| checkDelete (s, "z") ; |
| i := 1 ; |
| s := Sprintf1 (InitString ("%d"), i) ; |
| checkDelete (s, "1") ; |
| i := 12 ; |
| s := Sprintf1 (InitString ("%d"), i) ; |
| checkDelete (s, "12") ; |
| i := 123 ; |
| s := Sprintf1 (InitString ("%d"), i) ; |
| checkDelete (s, "123") ; |
| i := 1 ; |
| j := 2 ; |
| s := Sprintf2 (InitString ("%d %d"), i, j) ; |
| checkDelete (s, "1 2") ; |
| s := Sprintf2 (InitString ("%% %d %d"), i, j) ; |
| checkDelete (s, "% 1 2") ; |
| ch := 'a' ; |
| s := Sprintf1 (InitString ("%c"), ch) ; |
| checkDelete (s, "a") ; |
| s := Sprintf2 (InitString ("%c%c"), ch, ch) ; |
| checkDelete (s, "aa") |
| END test ; |
| |
| |
| VAR |
| r: INTEGER ; |
| BEGIN |
| r := 0 ; |
| test ; |
| exit (r) |
| END format. |