diff options
author | Chouser <chouser@n01se.net> | 2009-01-12 07:54:16 +0000 |
---|---|---|
committer | Chouser <chouser@n01se.net> | 2009-01-12 07:54:16 +0000 |
commit | 2b1e44f04489b5d70faff703bf824f07b74432d2 (patch) | |
tree | 2bc686386c956028744f7411a4404f59efca9115 /clojurescript/tests | |
parent | 6e53cf73c313d2bf76f5ee3c9a847548665b32e2 (diff) |
Rearrange ClojureScript code for AOT compilation and its eventual place in clojure.contrib. Also fix major breaking errors for Clojure SVN 1205, but it's not well tested with this latest version.
Diffstat (limited to 'clojurescript/tests')
-rw-r--r-- | clojurescript/tests/t01.cljs | 13 | ||||
-rw-r--r-- | clojurescript/tests/t02.cljs | 22 | ||||
-rw-r--r-- | clojurescript/tests/t03.cljs | 14 | ||||
-rw-r--r-- | clojurescript/tests/t04.cljs | 15 | ||||
-rw-r--r-- | clojurescript/tests/t05.js | 119 | ||||
-rw-r--r-- | clojurescript/tests/t06.cljs | 8 |
6 files changed, 191 insertions, 0 deletions
diff --git a/clojurescript/tests/t01.cljs b/clojurescript/tests/t01.cljs new file mode 100644 index 00000000..ac099bf5 --- /dev/null +++ b/clojurescript/tests/t01.cljs @@ -0,0 +1,13 @@ +; This may look like Clojure, but it's actually ClojureScript. Macros +; may be used here, but should be defined elsewhere, in regular +; Clojure code. +(ns n01se) + +(defn script-src [] + (for [elem (.getElementsByTagName document "script")] + (if-let [src (.src elem)] + src + "--none--"))) + +(doseq [src (script-src)] + (prn src)) diff --git a/clojurescript/tests/t02.cljs b/clojurescript/tests/t02.cljs new file mode 100644 index 00000000..850a55c6 --- /dev/null +++ b/clojurescript/tests/t02.cljs @@ -0,0 +1,22 @@ +; This may look like Clojure, but it's actually ClojureScript. Macros +; may be used here, but should be defined elsewhere, in regular +; Clojure code. +(ns n01se) + +(defn my-take + "Returns a lazy seq of the first n items in coll, or all items if + there are fewer than n." + [n coll] + (when (and (pos? n) (seq coll)) + (lazy-cons (first coll) (my-take (dec n) (rest coll))))) + +(defn script-src [] + (for [elem (.getElementsByTagName document "script")] + (do + (prn :next) + (if-let [src (.src elem)] + src + "--none--")))) + +(doseq [src (my-take 2 (script-src))] + (prn src)) diff --git a/clojurescript/tests/t03.cljs b/clojurescript/tests/t03.cljs new file mode 100644 index 00000000..3937cfa7 --- /dev/null +++ b/clojurescript/tests/t03.cljs @@ -0,0 +1,14 @@ +(ns net.n01se) + +(def x 5) +(def y 10) + +(defn bind-test [] + (when (= x 2) + (set! y 90)) + (binding [x (dec x) y (inc y)] + (when (pos? x) + (bind-test))) + (prn x y)) + +(bind-test) diff --git a/clojurescript/tests/t04.cljs b/clojurescript/tests/t04.cljs new file mode 100644 index 00000000..e8e1463f --- /dev/null +++ b/clojurescript/tests/t04.cljs @@ -0,0 +1,15 @@ +; This may look like Clojure, but it's actually ClojureScript. Macros +; may be used here, but should be defined elsewhere, in regular +; Clojure code. +(ns n01se) + +(defn script-src [] + (for [elem (.getElementsByTagName document "script")] + (do + (prn :next) + (if-let [src (.src elem)] + src + "--none--")))) + +(doseq [src (take 2 (script-src))] + (prn src)) diff --git a/clojurescript/tests/t05.js b/clojurescript/tests/t05.js new file mode 100644 index 00000000..3501723c --- /dev/null +++ b/clojurescript/tests/t05.js @@ -0,0 +1,119 @@ +function vToString( v ) { + var a = new Array( v.count() ); + for( var i = 0; i < v.count(); ++i ) { + a[ i ] = v.nth( i ); + } + return ['[', a.join(' '), ']'].join(''); +} + +var v = clojure.lang.PersistentVector.EMPTY; +for( var i = 0; i < 100; ++i ) { + v = v.cons( i * 10 ); +} +print( vToString( v ) ); +print( vToString( v.assocN( 20, 999 ) ) ); + +var a = []; +for( v2 = v; v2.count() > 0; v2 = v2.pop() ) { + a.push( v2.peek() ); +} +print( a ); + +v = clojure.lang.PersistentVector.EMPTY; +for( var i = 0; i < 100000; ++i ) { v = v.cons( i ); } +for(; v.count() > 0; v = v.pop() ) { v.peek() }; + + +print( vToString( clojure.lang.PersistentVector.create( + [ 'a', 'b', 'c', 'd', 'e' ] ) ) ); + +function time( msg, fn, reps ) { + reps = reps || 1; + var start = new Date(); + var last; + for( var i = 0; i < reps; ++i ) { + last = fn(); + } + var end = new Date(); + print( msg + ': ' + (end - start) + ' msecs' ); + return last; +} + +var Rand = (function(){ + var cycle = 1000000; + var rnd = new Array( cycle ); + var idx = -1; + for( var i = 0; i < cycle; ++i ) { + rnd[i] = Math.random(); + } + return { + reset: function() { idx = -1; }, + next: function( r ) { + idx = (idx + 1) % cycle; + return Math.floor( rnd[ idx ] * r ); + } + }; +})(); + +function suite( size, writes, reads, reps ) { + print( "Suite size: " + size + ", writes: " + writes + ", reads: " + reads ); + + var a = []; + var p = clojure.lang.PersistentVector.EMPTY; + + time( " Array push", function() { + for( var i = 0; i < size; i++ ) { + a.push( i ); + } + }, reps ); + + time( " PV cons ", function() { + for( var i = 0; i < size; i++ ) { + p = p.cons( i ); + } + }, reps ); + + var ta = 0; + time( " Array set ", function() { + Rand.reset(); + for( var i = 0; i < writes; ++i ) { + a[ Rand.next( size ) ] = i; + } + for( var j = 0; j < reads; ++j ) { + ta += a[ Rand.next( size ) ]; + } + }, reps); + + var tp = 0; + time( " PV set ", function() { + Rand.reset(); + for( var i = 0; i < writes; ++i ) { + p = p.assocN( Rand.next( size ), i ); + } + for( var j = 0; j < reads; ++j ) { + tp += p.nth( Rand.next( size ) ); + } + }, reps); + + print( "Done: " + ta + ", " + tp + "\n" ); +} + +suite( 100000, 10000, 20000 ); +suite( 30, 10000, 20000, 50 ); +suite( 100000, 10000, 0 ); +suite( 30, 10000, 0, 50 ); +suite( 100000, 0, 20000 ); +suite( 30, 0, 20000, 100 ); + +/* +var p = clojure.lang.PersistentVector.EMPTY; +for( var i = 0; i < 1088; i++ ) { +//for( var i = 0; i < 1056; i++ ) { + p = p.cons( i ); +} +print( p.nth( p.count() - 33 ) ) +print( p.cons("oops").nth( p.count() - 33 ) ) +*/ + +//print( clojure.lang.PersistentVector.EMPTY.constructor ); +print('done'); diff --git a/clojurescript/tests/t06.cljs b/clojurescript/tests/t06.cljs new file mode 100644 index 00000000..bfb06e8a --- /dev/null +++ b/clojurescript/tests/t06.cljs @@ -0,0 +1,8 @@ +(ns test) +(defn setText []) + +(prn :yo) +(prn (-> clojure .print-method .methodTable)) +(prn (JQuery "#nice")) +(prn (.ready ($ document) test/setText)) +(prn (+ 1 2 3 4)) |