diff options
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)) |