aboutsummaryrefslogtreecommitdiff
path: root/clojurescript/tests
diff options
context:
space:
mode:
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))