[pypy-commit] lang-scheme default: Implement make-string
boemmels
noreply at buildbot.pypy.org
Sat Dec 3 18:22:00 CET 2011
Author: Juergen Boemmels <boemmels at web.de>
Branch:
Changeset: r25:9ff8fb62dd90
Date: 2011-11-29 23:44 +0100
http://bitbucket.org/pypy/lang-scheme/changeset/9ff8fb62dd90/
Log: Implement make-string
diff --git a/scheme/procedure.py b/scheme/procedure.py
--- a/scheme/procedure.py
+++ b/scheme/procedure.py
@@ -269,7 +269,27 @@
# simply relay to map and ignore output
(res, ctx) = Map().procedure_tr(ctx, lst)
return (w_undefined, ctx)
-
+
+class MakeString(W_Procedure):
+ _symbol_name = "make-string"
+
+ def procedure(self, ctx, lst):
+ if len(lst) < 1 or len(lst) > 2:
+ raise WrongArgsNumber
+
+ w_number = lst[0]
+ if not isinstance(w_number, W_Integer):
+ raise WrongArgType(w_number, "Integer")
+
+ if len(lst) == 2:
+ w_char = lst[1]
+ else:
+ w_char = W_Character(' ')
+ if not isinstance(w_char, W_Character):
+ raise WrongArgType(w_char, "Character")
+
+ return W_String(w_char.to_string() * w_number.to_fixnum())
+
##
# Equivalnece Predicates
##
diff --git a/scheme/test/test_scheme_level.py b/scheme/test/test_scheme_level.py
--- a/scheme/test/test_scheme_level.py
+++ b/scheme/test/test_scheme_level.py
@@ -104,4 +104,11 @@
(#f #f #f #f #f #f #f #f #f #t #f #f) ; procedure?
(#f #f #f #f #f #f #f #f #f #f #t #t)); vector?
))
-""")
\ No newline at end of file
+""")
+
+def test_string():
+ run_with_assert(r"""
+(define new-str (make-string 7 #\*))
+(assert (string? new-str))
+(assert (equal? new-str "*******"))
+""")
More information about the pypy-commit
mailing list