source: trunk/abcl/contrib/jss/t/jss-tests.lisp @ 15086

Last change on this file since 15086 was 15086, checked in by Mark Evenson, 6 years ago

jss: new macro WITH-CLASS-LOOKUP-DISAMBIGUATED
(Alan Ruttenberg)

(with-class-lookup-disambiguated (lang.object) (find-java-class 'object))

-> success (otherwise error: ambiguous)

From <https://github.com/armedbear/abcl/pull/57>.

Merges
<https://github.com/armedbear/abcl/pull/57/commits/5103d57822691d74c66b80c754f8438df6806bba>.

File size: 2.5 KB
Line 
1(in-package :cl-user)
2
3(prove:plan 8)
4
5(prove:is
6 (read-from-string "#\"{bar}.{foo}\"")
7 '(get-java-field bar foo t))
8(prove:is
9 (read-from-string "#\"q.bar.{foo}\"")
10 '(get-java-field (load-time-value (find-java-class "q.bar")) foo t))
11(prove:is
12 (read-from-string "#\"{bar}.foo\"")
13 '(get-java-field bar "foo" t))
14(prove:is-error
15 (read-from-string "#\".bar.foo\"")
16 'simple-error)
17;;; http://abcl.org/trac/ticket/205
18(prove:is
19 (with-constant-signature ((substring "substring"))
20   (substring "01234" 2)) "234")
21;;; http://abcl.org/trac/ticket/229 - note: version of test for this ticket was broken in tests.lisp
22(prove:is (#"toString"
23           (find "size" (#"getMethods" (find-java-class "java.util.Collections$UnmodifiableMap"))
24                 :test 'string-equal :key #"getName"))
25    (#"toString" (java::jmethod "java.util.Collections$UnmodifiableMap" "size" )))
26
27(prove:is 
28 (jss::with-class-lookup-disambiguated (lang.object) (find-java-class 'object))
29 (find-java-class 'java.lang.object))
30
31;; Object is ambiguous in default java
32(prove:is-error
33 (find-java-class 'object)
34 'simple-error)
35
36;; test that optimized jss is much faster than unoptimized
37(let ()
38  (defun optimized-jss (count)
39    (loop repeat count do (#"compile" 'regex.Pattern ".*")))
40  (let ((jss::*inhibit-jss-optimization* t))
41    (defun unoptimized-jss (count)
42      (loop repeat count do (#"compile" 'regex.Pattern ".*"))))
43  (defun just-loop (count)
44    (loop repeat count))
45  (let ((jss::*inhibit-jss-optimization* nil))
46    (compile 'just-loop)
47    (compile 'optimized-jss))
48  (let ((jss::*inhibit-jss-optimization* t))
49    (compile 'unoptimized-jss))
50
51  (defmacro timeit (&body body)
52    `(let ((start (#"currentTimeMillis" 'system)))
53       ,@body
54       (- (#"currentTimeMillis" 'system) start)))
55
56  (prove:plan 1)
57  (prove:is-type (let ((just-loop (timeit (just-loop 10000))))
58     (+ 0.0 
59        (/ (-  (timeit (optimized-jss 10000)) just-loop)
60      (-  (timeit (unoptimized-jss 10000)) just-loop))))
61                 '(float 0 0.1)
62                 "Testing JSS compiler optimization
"))
63
64(prove:plan 2)
65(let* ((jss::*inhibit-jss-optimization* nil)
66       (optimized-jss
67        (macroexpand (precompiler::precompile-form
68                                    '(#"compile" 'regex.Pattern ".*") t))))
69  (let* ((jss::*inhibit-jss-optimization* t)
70         (unoptimized-jss
71          (macroexpand (precompiler::precompile-form '(#"compile" 'regex.Pattern ".*") t))))
72    (prove:is (car optimized-jss) 'java:jstatic)
73    (prove:is (caar unoptimized-jss) 'lambda)))
74
75(prove:finalize)
76
Note: See TracBrowser for help on using the repository browser.