aboutsummaryrefslogtreecommitdiff
path: root/clojurescript/tests
diff options
context:
space:
mode:
authorChouser <chouser@n01se.net>2009-01-12 07:54:16 +0000
committerChouser <chouser@n01se.net>2009-01-12 07:54:16 +0000
commit2b1e44f04489b5d70faff703bf824f07b74432d2 (patch)
tree2bc686386c956028744f7411a4404f59efca9115 /clojurescript/tests
parent6e53cf73c313d2bf76f5ee3c9a847548665b32e2 (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.cljs13
-rw-r--r--clojurescript/tests/t02.cljs22
-rw-r--r--clojurescript/tests/t03.cljs14
-rw-r--r--clojurescript/tests/t04.cljs15
-rw-r--r--clojurescript/tests/t05.js119
-rw-r--r--clojurescript/tests/t06.cljs8
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))