diff options
author | Ludovic Courtès <ludo@gnu.org> | 2012-03-07 21:57:58 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2012-03-07 21:58:07 +0100 |
commit | da35d2eaa9dbc1d3cf098c9a1c9bc62dcb2515bd (patch) | |
tree | b4180db3726558fe7d28a147d4c76514ce6ef4c3 /benchmark-suite | |
parent | 3658a3744bcc7c75db24143db1dae1bd13554515 (diff) |
Improve port benchmark.
* benchmark-suite/benchmarks/ports.bm (sequence): New macro, formerly
local to the "rdelim" benchmark prefix.
(large-string): New procedure.
(%latin1-port, %utf8/ascii-port, %utf8/wide-port): Use it.
("peek-char", "char-ready?", "read-char"): Use `sequence'.
Diffstat (limited to 'benchmark-suite')
-rw-r--r-- | benchmark-suite/benchmarks/ports.bm | 84 |
1 files changed, 44 insertions, 40 deletions
diff --git a/benchmark-suite/benchmarks/ports.bm b/benchmark-suite/benchmarks/ports.bm index 166cfa5f1..630ece290 100644 --- a/benchmark-suite/benchmarks/ports.bm +++ b/benchmark-suite/benchmarks/ports.bm @@ -1,6 +1,6 @@ ;;; ports.bm --- Port I/O. -*- mode: scheme; coding: utf-8; -*- ;;; -;;; Copyright (C) 2010, 2011 Free Software Foundation, Inc. +;;; Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc. ;;; ;;; This program is free software; you can redistribute it and/or ;;; modify it under the terms of the GNU Lesser General Public License @@ -21,68 +21,72 @@ #:use-module (ice-9 rdelim) #:use-module (benchmark-suite lib)) +(define-syntax sequence + (lambda (s) + ;; Create a sequence `(begin EXPR ...)' with COUNT occurrences of EXPR. + (syntax-case s () + ((_ expr count) + (number? (syntax->datum #'count)) + (cons #'begin + (make-list (syntax->datum #'count) #'expr)))))) + +(define (large-string s) + (string-concatenate (make-list (* iteration-factor 10000) s))) + (define %latin1-port (with-fluids ((%default-port-encoding #f)) - (open-input-string "hello, world"))) + (open-input-string (large-string "hello, world")))) (define %utf8/ascii-port (with-fluids ((%default-port-encoding "UTF-8")) - (open-input-string "hello, world"))) + (open-input-string (large-string "hello, world")))) (define %utf8/wide-port (with-fluids ((%default-port-encoding "UTF-8")) - (open-input-string "안녕하세요"))) + (open-input-string (large-string "안녕하세요")))) (with-benchmark-prefix "peek-char" - (benchmark "latin-1 port" 700000 - (peek-char %latin1-port)) + (benchmark "latin-1 port" 700 + (sequence (peek-char %latin1-port) 1000)) - (benchmark "utf-8 port, ascii character" 700000 - (peek-char %utf8/ascii-port)) + (benchmark "utf-8 port, ascii character" 700 + (sequence (peek-char %utf8/ascii-port) 1000)) - (benchmark "utf-8 port, Korean character" 700000 - (peek-char %utf8/wide-port))) + (benchmark "utf-8 port, Korean character" 700 + (sequence (peek-char %utf8/wide-port) 1000))) -(with-benchmark-prefix "read-char" +(with-benchmark-prefix "char-ready?" - (benchmark "latin-1 port" 10000000 - (read-char %latin1-port)) + (benchmark "latin-1 port" 10000 + (sequence (char-ready? %latin1-port) 1000)) - (benchmark "utf-8 port, ascii character" 10000000 - (read-char %utf8/ascii-port)) + (benchmark "utf-8 port, ascii character" 10000 + (sequence (char-ready? %utf8/ascii-port) 1000)) - (benchmark "utf-8 port, Korean character" 10000000 - (read-char %utf8/wide-port))) + (benchmark "utf-8 port, Korean character" 10000 + (sequence (char-ready? %utf8/wide-port) 1000))) -(with-benchmark-prefix "char-ready?" +;; Keep the `read-char' benchmarks last as they consume input from the +;; ports. + +(with-benchmark-prefix "read-char" - (benchmark "latin-1 port" 10000000 - (char-ready? %latin1-port)) + (benchmark "latin-1 port" 10000 + (sequence (read-char %latin1-port) 1000)) - (benchmark "utf-8 port, ascii character" 10000000 - (char-ready? %utf8/ascii-port)) + (benchmark "utf-8 port, ascii character" 10000 + (sequence (read-char %utf8/ascii-port) 1000)) - (benchmark "utf-8 port, Korean character" 10000000 - (char-ready? %utf8/wide-port))) + (benchmark "utf-8 port, Korean character" 10000 + (sequence (read-char %utf8/wide-port) 1000))) (with-benchmark-prefix "rdelim" - (let-syntax ((sequence (lambda (s) - ;; Create a sequence `(begin EXPR ...)' with - ;; COUNT occurrences of EXPR. - (syntax-case s () - ((_ expr count) - (number? (syntax->datum #'count)) - (cons #'begin - (make-list - (syntax->datum #'count) - #'expr))))))) - (let ((str (string-concatenate - (make-list 1000 "one line\n")))) - (benchmark "read-line" 1000 - (let ((port (with-fluids ((%default-port-encoding "UTF-8")) - (open-input-string str)))) - (sequence (read-line port) 1000)))))) + (let ((str (string-concatenate (make-list 1000 "one line\n")))) + (benchmark "read-line" 1000 + (let ((port (with-fluids ((%default-port-encoding "UTF-8")) + (open-input-string str)))) + (sequence (read-line port) 1000))))) |