aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTino Calancha2017-03-03 18:26:30 +0900
committerTino Calancha2017-03-03 18:26:30 +0900
commit244de7b0ed3bb23e700c9edef51e413602d8720a (patch)
treec61679d80ae01af96635f4572191f00c7ace58f5
parentf5388ba8a7f3970afd0e2bcc52c834ae56178442 (diff)
downloademacs-244de7b0ed3bb23e700c9edef51e413602d8720a.tar.gz
emacs-244de7b0ed3bb23e700c9edef51e413602d8720a.zip
Use lexical binding in benchmark.el
* lisp/emacs-lisp/benchmark.el: Enable lexical binding. (benchmark-elapse): Use 'declare'. * test/lisp/emacs-lisp/benchmark-tests.el: Add test suite.
-rw-r--r--lisp/emacs-lisp/benchmark.el6
-rw-r--r--test/lisp/emacs-lisp/benchmark-tests.el51
2 files changed, 53 insertions, 4 deletions
diff --git a/lisp/emacs-lisp/benchmark.el b/lisp/emacs-lisp/benchmark.el
index 25eddf5f6b0..a2217d20953 100644
--- a/lisp/emacs-lisp/benchmark.el
+++ b/lisp/emacs-lisp/benchmark.el
@@ -1,4 +1,4 @@
1;;; benchmark.el --- support for benchmarking code 1;;; benchmark.el --- support for benchmarking code -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 2003-2017 Free Software Foundation, Inc. 3;; Copyright (C) 2003-2017 Free Software Foundation, Inc.
4 4
@@ -33,6 +33,7 @@
33 33
34(defmacro benchmark-elapse (&rest forms) 34(defmacro benchmark-elapse (&rest forms)
35 "Return the time in seconds elapsed for execution of FORMS." 35 "Return the time in seconds elapsed for execution of FORMS."
36 (declare (indent 0) (debug t))
36 (let ((t1 (make-symbol "t1")) 37 (let ((t1 (make-symbol "t1"))
37 (t2 (make-symbol "t2"))) 38 (t2 (make-symbol "t2")))
38 `(let (,t1 ,t2) 39 `(let (,t1 ,t2)
@@ -41,9 +42,6 @@
41 (setq ,t2 (current-time)) 42 (setq ,t2 (current-time))
42 (float-time (time-subtract ,t2 ,t1))))) 43 (float-time (time-subtract ,t2 ,t1)))))
43 44
44(put 'benchmark-elapse 'edebug-form-spec t)
45(put 'benchmark-elapse 'lisp-indent-function 0)
46
47;;;###autoload 45;;;###autoload
48(defmacro benchmark-run (&optional repetitions &rest forms) 46(defmacro benchmark-run (&optional repetitions &rest forms)
49 "Time execution of FORMS. 47 "Time execution of FORMS.
diff --git a/test/lisp/emacs-lisp/benchmark-tests.el b/test/lisp/emacs-lisp/benchmark-tests.el
new file mode 100644
index 00000000000..14426aeec41
--- /dev/null
+++ b/test/lisp/emacs-lisp/benchmark-tests.el
@@ -0,0 +1,51 @@
1;;; benchmark-tests.el --- Test suite for benchmark. -*- lexical-binding: t -*-
2
3;; Copyright (C) 2017 Free Software Foundation, Inc.
4
5;; This file is part of GNU Emacs.
6
7;; GNU Emacs is free software: you can redistribute it and/or modify
8;; it under the terms of the GNU General Public License as published by
9;; the Free Software Foundation, either version 3 of the License, or
10;; (at your option) any later version.
11
12;; GNU Emacs is distributed in the hope that it will be useful,
13;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15;; GNU General Public License for more details.
16
17;; You should have received a copy of the GNU General Public License
18;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
19
20;;; Code:
21
22(require 'benchmark)
23(require 'ert)
24
25(ert-deftest benchmark-tests ()
26 (let (str t-long t-short)
27 (should (consp (benchmark-run nil (1+ 0))))
28 (should (consp (benchmark-run 1 (1+ 0))))
29 (should (stringp (benchmark nil (1+ 0))))
30 (should (stringp (benchmark 1 (1+ 0))))
31 (should (consp (benchmark-run-compiled nil (1+ 0))))
32 (should (consp (benchmark-run-compiled 1 (1+ 0))))
33 ;; First test is heavier, must need longer time.
34 (should (> (car (benchmark-run nil
35 (let ((n 100000)) (while (> n 1) (setq n (1- n))))))
36 (car (benchmark-run nil (1+ 0)))))
37 (should (> (car (benchmark-run nil
38 (let ((n 100000)) (while (> n 1) (setq n (1- n))))))
39 (car (benchmark-run nil (1+ 0)))))
40 (should (> (car (benchmark-run-compiled nil
41 (let ((n 100000)) (while (> n 1) (setq n (1- n))))))
42 (car (benchmark-run-compiled nil (1+ 0)))))
43 (setq str (benchmark nil '(let ((n 100000)) (while (> n 1) (setq n (1- n))))))
44 (string-match "Elapsed time: \\([0-9.]+\\)" str)
45 (setq t-long (string-to-number (match-string 1 str)))
46 (setq str (benchmark nil '(1+ 0)))
47 (string-match "Elapsed time: \\([0-9.]+\\)" str)
48 (setq t-short (string-to-number (match-string 1 str)))
49 (should (> t-long t-short))))
50
51;;; benchmark-tests.el ends here.