Ignore:
Timestamp:
06/09/17 19:26:28 (6 years ago)
Author:
Mark Evenson
Message:

Further fixes for JSS

JAVAPARSER now "stacks" its macro definition on the existing one it
inherits from JSS.

Refactor all tests to just pollute CL-USER where necessary (strictly
speaking it shouldn't be necessary as all PROVE tests should be able
to use lexical bindings.

Document existence of Java field access via SHARPSIGN-QUOTATION_MARK,
e.g.

(#"{java.lang.System}.{fileSeparator}")

and the new Java DSL

(asdf:make :javaparser)
(#"'#1"new ByteBuddy?()

.subclass(Object.class,t)
.method(ElementMatchers?.named("toString"))
.intercept(FixedValue?.value("Hello World!"))
.make()
.load(getClass().getClassLoader())
.getLoaded()"

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/contrib/jss/t/jss-tests.lisp

    r15065 r15066  
    11(in-package :cl-user)
    22
    3 (defpackage jss-test
    4   (:use :cl :cl-user :jss :prove))
     3(prove:plan 6)
    54
    6 (in-package :jss-test)
    7 
    8 (plan 6)
    9 
    10 (is (read-from-string "#\"{bar}.{foo}\"") '(get-java-field bar foo t))
    11 (is (read-from-string "#\"q.bar.{foo}\"") '(get-java-field (load-time-value (find-java-class "q.bar")) foo t))
    12 (is (read-from-string "#\"{bar}.foo\"") '(get-java-field bar "foo" t))
    13 (is-error (read-from-string "#\".bar.foo\"") 'simple-error)
     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)
    1417;;; http://abcl.org/trac/ticket/205
    15 (is (with-constant-signature ((substring "substring")) (substring "01234" 2)) "234")
     18(prove:is
     19 (with-constant-signature ((substring "substring"))
     20   (substring "01234" 2)) "234")
    1621;;; http://abcl.org/trac/ticket/229 - note: version of test for this ticket was broken in tests.lisp
    17 (is (#"toString" (find "size"
    18       (#"getMethods" (find-java-class "java.util.Collections$UnmodifiableMap"))
    19     :test 'string-equal :key #"getName"))
     22(prove:is (#"toString"
     23           (find "size" (#"getMethods" (find-java-class "java.util.Collections$UnmodifiableMap"))
     24                 :test 'string-equal :key #"getName"))
    2025    (#"toString" (java::jmethod "java.util.Collections$UnmodifiableMap" "size" )))
    2126
    2227;; test that optimized jss is much faster than unoptimized
    23 (defun optimized-jss (count)
    24   (loop repeat count do (#"compile" 'regex.Pattern ".*")))
     28(let ()
     29  (defun optimized-jss (count)
     30    (loop repeat count do (#"compile" 'regex.Pattern ".*")))
     31  (let ((jss::*inhibit-jss-optimization* t))
     32    (defun unoptimized-jss (count)
     33      (loop repeat count do (#"compile" 'regex.Pattern ".*"))))
     34  (defun just-loop (count)
     35    (loop repeat count))
     36  (let ((jss::*inhibit-jss-optimization* nil))
     37    (compile 'just-loop)
     38    (compile 'optimized-jss))
     39  (let ((jss::*inhibit-jss-optimization* t))
     40    (compile 'unoptimized-jss))
    2541
    26 (let ((jss::*inhibit-jss-optimization* t))
    27   (defun unoptimized-jss (count)
    28   (loop repeat count do (#"compile" 'regex.Pattern ".*"))))
     42  (defmacro timeit (&body body)
     43    `(let ((start (#"currentTimeMillis" 'system)))
     44       ,@body
     45       (- (#"currentTimeMillis" 'system) start)))
    2946
    30 (defun just-loop (count)
    31   (loop repeat count))
    32 
    33 (let ((jss::*inhibit-jss-optimization* nil))
    34   (compile 'just-loop)
    35   (compile 'optimized-jss))
    36 (let ((jss::*inhibit-jss-optimization* t))
    37   (compile 'unoptimized-jss))
    38 
    39 (defmacro timeit (&body body)
    40   `(let ((start (#"currentTimeMillis" 'system)))
    41     ,@body
    42     (- (#"currentTimeMillis" 'system) start)))
    43 
    44 
    45 (plan 1)
    46 (is-type (let ((just-loop (timeit (just-loop 10000))))
     47  (prove:plan 1)
     48  (prove:is-type (let ((just-loop (timeit (just-loop 10000))))
    4749     (+ 0.0
    4850        (/ (-  (timeit (optimized-jss 10000)) just-loop)
    4951      (-  (timeit (unoptimized-jss 10000)) just-loop))))
    50    '(float 0 0.1))
     52                 '(float 0 0.1)
     53                 "Testing JSS compiler optimization
"))
    5154
    52 (plan 2)
     55(prove:plan 2)
    5356(let* ((jss::*inhibit-jss-optimization* nil)
    54        (optimized-jss (macroexpand (precompiler::precompile-form '(#"compile" 'regex.Pattern ".*") t))))
     57       (optimized-jss
     58        (macroexpand (precompiler::precompile-form
     59                                    '(#"compile" 'regex.Pattern ".*") t))))
    5560  (let* ((jss::*inhibit-jss-optimization* t)
    56          (unoptimized-jss (macroexpand (precompiler::precompile-form '(#"compile" 'regex.Pattern ".*") t))))
    57     (is (car optimized-jss) 'java:jstatic)
    58     (is (caar unoptimized-jss) 'lambda)))
     61         (unoptimized-jss
     62          (macroexpand (precompiler::precompile-form '(#"compile" 'regex.Pattern ".*") t))))
     63    (prove:is (car optimized-jss) 'java:jstatic)
     64    (prove:is (caar unoptimized-jss) 'lambda)))
    5965
    60 (finalize)
     66(prove:finalize)
    6167
Note: See TracChangeset for help on using the changeset viewer.