From bcbafd2e7775172a94313210f124b483f0bde9f3 Mon Sep 17 00:00:00 2001
From: Paul Michael Bauer <paul.michael.bauer@gmail.com>
Date: Sat, 10 Sep 2011 18:56:20 -0700
Subject: [PATCH 01/10] Refactored script/run&repl, auto-generate script/maven-classpath, update
 to 1.3 beta 3

---
 pom.xml              |   38 +++++++++++++++++++++++++++-----------
 script/repl          |    7 ++-----
 script/run           |    5 ++---
 script/script_common |    6 ++++++
 4 files changed, 37 insertions(+), 19 deletions(-)
 create mode 100755 script/script_common

diff --git a/pom.xml b/pom.xml
index 8bafd97..9ed4e04 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,24 +20,40 @@
     <dependency>
       <groupId>org.clojure</groupId>
       <artifactId>clojure</artifactId>
-      <version>1.3.0-alpha8</version>
+      <version>1.3.0-beta3</version>
     </dependency>
   </dependencies>
 
   <build>
     <plugins>
       <plugin>
-	<groupId>com.theoryinpractise</groupId>
-	<artifactId>clojure-maven-plugin</artifactId>
-	<version>1.3.7</version>
-	<extensions>true</extensions>
-	<configuration>
-	  <warnOnReflection>${clojure.warnOnReflection}</warnOnReflection>
-	  <temporaryOutputDirectory>false</temporaryOutputDirectory>
-	</configuration>
-      </plugin>      
+        <groupId>com.theoryinpractise</groupId>
+        <artifactId>clojure-maven-plugin</artifactId>
+        <version>1.3.7</version>
+        <extensions>true</extensions>
+        <configuration>
+          <warnOnReflection>${clojure.warnOnReflection}</warnOnReflection>
+          <temporaryOutputDirectory>false</temporaryOutputDirectory>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <version>2.3</version>
+        <executions>
+          <execution>
+            <id>build-classpath</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>build-classpath</goal>
+            </goals>
+            <configuration>
+                <outputFile>${basedir}/script/maven-classpath</outputFile>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
   
-
 </project>
diff --git a/script/repl b/script/repl
index 5542ada..26f1f34 100755
--- a/script/repl
+++ b/script/repl
@@ -1,6 +1,3 @@
 #!/bin/sh
-CLASSPATH=src/main/clojure:`cat script/maven-classpath`
-
-java -server -XX:+AggressiveOpts -cp $CLASSPATH clojure.main
-
-
+. $(dirname $0)/script_common
+${CMD_BASE} -r
diff --git a/script/run b/script/run
index 6afbe3a..c301e2e 100755
--- a/script/run
+++ b/script/run
@@ -1,4 +1,3 @@
 #!/bin/sh
-CLASSPATH='target/*':src/main/clojure:`cat script/maven-classpath`
-
-java -server -XX:+AggressiveOpts -cp $CLASSPATH clojure.main -m $@
+. $(dirname $0)/script_common
+${CMD_BASE} -m $@
diff --git a/script/script_common b/script/script_common
new file mode 100755
index 0000000..c3e01ae
--- /dev/null
+++ b/script/script_common
@@ -0,0 +1,6 @@
+#!/bin/sh
+BASE_DIR=$(dirname $0)/..
+TARGET_CLASSPATH=`ls -d ${BASE_DIR}/target/*class* | tr '\n' :`
+MAVEN_CLASSPATH=`cat ${BASE_DIR}/script/maven-classpath`
+CLASSPATH=${TARGET_CLASSPATH}${BASE_DIR}/src/main/clojure:${MAVEN_CLASSPATH}
+CMD_BASE="java -server -XX:+AggressiveOpts -cp ${CLASSPATH} clojure.main"
-- 
1.7.4.1


From 45a5a3211f12d0a3f79c64311413b76d770d0ada Mon Sep 17 00:00:00 2001
From: Paul Michael Bauer <paul.michael.bauer@gmail.com>
Date: Sat, 10 Sep 2011 21:45:24 -0700
Subject: [PATCH 02/10] Bump clojure-maven-plugin version

---
 pom.xml |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/pom.xml b/pom.xml
index 9ed4e04..e0403fb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
       <plugin>
         <groupId>com.theoryinpractise</groupId>
         <artifactId>clojure-maven-plugin</artifactId>
-        <version>1.3.7</version>
+        <version>1.3.8</version>
         <extensions>true</extensions>
         <configuration>
           <warnOnReflection>${clojure.warnOnReflection}</warnOnReflection>
-- 
1.7.4.1


From a65ff828b427af4662ae99dfe73fc51807563b51 Mon Sep 17 00:00:00 2001
From: Paul Michael Bauer <paul.michael.bauer@gmail.com>
Date: Sat, 10 Sep 2011 21:49:03 -0700
Subject: [PATCH 03/10] Changed deprecated var in pom

---
 pom.xml |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/pom.xml b/pom.xml
index e0403fb..862630a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
   <modelVersion>4.0.0</modelVersion>
   <artifactId>test.benchmark</artifactId>
   <version>0.1.0-SNAPSHOT</version>
-  <name>${artifactId}</name>
+  <name>${project.artifactId}</name>
 
   <parent>
     <groupId>org.clojure</groupId>
-- 
1.7.4.1


From c6de64cfb8135ebc0fed49e7871aa19f5a73470e Mon Sep 17 00:00:00 2001
From: Paul Michael Bauer <paul.michael.bauer@gmail.com>
Date: Sat, 10 Sep 2011 22:26:26 -0700
Subject: [PATCH 04/10] Add mandelbrot test resources

---
 src/resources/alioth/mandelbrot/m256.bmp      |  Bin 0 -> 8203 bytes
 src/resources/alioth/mandelbrot/m8.bmp        |  Bin 0 -> 41 bytes
 src/resources/alioth/test/mandelbrot/m256.bmp |  Bin 0 -> 8203 bytes
 src/resources/alioth/test/mandelbrot/m8.bmp   |  Bin 0 -> 41 bytes
 4 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 src/resources/alioth/mandelbrot/m256.bmp
 create mode 100644 src/resources/alioth/mandelbrot/m8.bmp
 create mode 100644 src/resources/alioth/test/mandelbrot/m256.bmp
 create mode 100644 src/resources/alioth/test/mandelbrot/m8.bmp

diff --git a/src/resources/alioth/mandelbrot/m256.bmp b/src/resources/alioth/mandelbrot/m256.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..a3a20c1a1e99e786ddd69427a9bd4adeac70f042
GIT binary patch
literal 8203
zcmeHMPm5ed5bw9MCQCpzpr{Daa}ZYWuu(J$3U5FVZ}IBI8Sw)c(1V`dBjU|NjyVP-
z;K2{z&36zqm$2Xm@M*vVbI5{%qdS?l`tNpE^{YAv$;F1<*WJIW>gww1>h79%Upe>k
zs~6|+cTP=|exm>XZfk-0BQ}FH{z}mAS00~jc)VHjxXAw><$uJFf1%qhI0bi&88}=U
z({uQ~F*i9J_zj1jHHJ07)5fq9gz=9V`3>MKe+T%S5zq?y9SZZ)#ynueE5O<L!}zTJ
zuL-zd9|iXRlhbcz%s7GX+J3+}`>TfauU@H1_psuxe)xjk?0lfALkwzXapOf}ZoM=a
zgMR!NmS=lMeWTP4h${;W@L31Ax&OsbBEI$Z<=NjBHs-4;etzDZc>MNJjsLj|a}Qe+
zK0_(GyRUbFU{vQR-X6aZ`9G(qQhKc;ez(6yDca4?5&z@L`%e;rcGE@NG;|f4Zj<2c
zisGsZv$s^gP%mlP#BR(_l_;~!@Ou^c;JT@tQ2Ew%Q+Z(M5`gPvWhC>@<yXAC(4R)Z
zy|X%#PH{E+F2{dg;qf2K;mY)3XJv&1iObJtC^$J5|K6Pv?-9Yl?E)uJ{@||?9}s`3
zo-tn{{E3p?z!oe@X?+?6vHW$x4UMiGU_^Mi`Xov=rTNMD_TVTA3PA+ltV#tg72I$N
zjD1dU2EkZCIG0h`6#P2~B@-Yxnt;Xx32&U97~Y0s0<>5F!5+aKm;cu*h0PbkycG_x
zI>h|Z0r%AY0C>K+Jt=hB^7vwQ{ANx5;9%hXVSGo~a|e~t<9dASw@=);g>Vn6b~NTw
zrBdikRD&mI@4-?nu=fE~?{R(Kn18M-o%mwq>%b4~?NFItu)kycUL8cX^bHZf8D>;%
z>W`Hi-&DpQPsfKVhmLINd)4E<U6J1xc$fHMWpwyc9=N`Y-RbMuTi-tFQh%)Uj$rAV
z6@1}v?eXKzf3yEXj<4Gc@zo=TJM+Pvh2SB82ESc*m_Oj5J3Bffp%WkNM)9yb+LLd)
z$d<kZKgCZx9{4Ek<X?$?Ie{<wI9!kun<4x>`|W85s=4j2>AWJDbKm{bD?{v$UuXVy
z8=K@i*!i`jJ9YFH?@|+2-16WvBO`L=VQ{N{Moy}3c!A$uhNp^O{%#5m=XX1a`|u*!
zPqM$Xe$x6&{v-KcTEPkbOdde-;Q!iNh~nXu87xTsH0-}%V2THRY5z;{Bj`67e*!)k
zzm{IX$@te!;?6^r6n}%0S9a0}I{=E8U)hPhgFV2UAI?BEeDwSdXU;Ee6=2T47GU=L
zl+It_{Fcst>HZ+yKcxGMaQ_kSPu9wP?SACVZ?Oebnfn`m{|jQ2hIJ^4I{+dY{V1a-
zaq0fLn{oPTdH+2_@b&4~wsr{-p!>IUe<ygUzLMS#<N}J+OOY_DIhN{^vjp>pKo!|Z
z7D;-4;j;?A-=z1S^nR4ypVIpk86br3%t++}4lNJR3GZ+5{ob_6wzkq|L;GsE0wcl8
zCkVw|Bn)HJ@)x=MTK;1hc<rZ>KPmLD<zJ-yjg<cp@<&R_Kk2mw&0VSIuY~-Uls}X5
zZ&LnF%Kz;O`9p9BHvcH(FF`z?{{*~e@}~ep0Vf<>h5oYx*j+}qPDTs(m^DcioH!%~
z2;@4ziCOtl{<_795j2b@iI0*1a5n#b2>w@clr0#ahMtV11O4V%8&&Nwf+Kf9BH2g!
z{R8aJ>Id^@=Lh3Uzu)wQ!l(h~^nkjGru6%h5`Mo@((h{xJAH6)0hi=U{7U%!P^}7k
T(8ip0J=C5@J^n+TEIZi0a!IcP

literal 0
HcmV?d00001

diff --git a/src/resources/alioth/mandelbrot/m8.bmp b/src/resources/alioth/mandelbrot/m8.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..d1bc70a7f94c9fda8f9cb842b3e0f5d0e60db6fe
GIT binary patch
literal 41
scmWGA;W9K+Ff`+0;9w8{!WxEujQ=G6%l`ZSPZmfs{$uzD6a&ft0O@=UBme*a

literal 0
HcmV?d00001

diff --git a/src/resources/alioth/test/mandelbrot/m256.bmp b/src/resources/alioth/test/mandelbrot/m256.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..a3a20c1a1e99e786ddd69427a9bd4adeac70f042
GIT binary patch
literal 8203
zcmeHMPm5ed5bw9MCQCpzpr{Daa}ZYWuu(J$3U5FVZ}IBI8Sw)c(1V`dBjU|NjyVP-
z;K2{z&36zqm$2Xm@M*vVbI5{%qdS?l`tNpE^{YAv$;F1<*WJIW>gww1>h79%Upe>k
zs~6|+cTP=|exm>XZfk-0BQ}FH{z}mAS00~jc)VHjxXAw><$uJFf1%qhI0bi&88}=U
z({uQ~F*i9J_zj1jHHJ07)5fq9gz=9V`3>MKe+T%S5zq?y9SZZ)#ynueE5O<L!}zTJ
zuL-zd9|iXRlhbcz%s7GX+J3+}`>TfauU@H1_psuxe)xjk?0lfALkwzXapOf}ZoM=a
zgMR!NmS=lMeWTP4h${;W@L31Ax&OsbBEI$Z<=NjBHs-4;etzDZc>MNJjsLj|a}Qe+
zK0_(GyRUbFU{vQR-X6aZ`9G(qQhKc;ez(6yDca4?5&z@L`%e;rcGE@NG;|f4Zj<2c
zisGsZv$s^gP%mlP#BR(_l_;~!@Ou^c;JT@tQ2Ew%Q+Z(M5`gPvWhC>@<yXAC(4R)Z
zy|X%#PH{E+F2{dg;qf2K;mY)3XJv&1iObJtC^$J5|K6Pv?-9Yl?E)uJ{@||?9}s`3
zo-tn{{E3p?z!oe@X?+?6vHW$x4UMiGU_^Mi`Xov=rTNMD_TVTA3PA+ltV#tg72I$N
zjD1dU2EkZCIG0h`6#P2~B@-Yxnt;Xx32&U97~Y0s0<>5F!5+aKm;cu*h0PbkycG_x
zI>h|Z0r%AY0C>K+Jt=hB^7vwQ{ANx5;9%hXVSGo~a|e~t<9dASw@=);g>Vn6b~NTw
zrBdikRD&mI@4-?nu=fE~?{R(Kn18M-o%mwq>%b4~?NFItu)kycUL8cX^bHZf8D>;%
z>W`Hi-&DpQPsfKVhmLINd)4E<U6J1xc$fHMWpwyc9=N`Y-RbMuTi-tFQh%)Uj$rAV
z6@1}v?eXKzf3yEXj<4Gc@zo=TJM+Pvh2SB82ESc*m_Oj5J3Bffp%WkNM)9yb+LLd)
z$d<kZKgCZx9{4Ek<X?$?Ie{<wI9!kun<4x>`|W85s=4j2>AWJDbKm{bD?{v$UuXVy
z8=K@i*!i`jJ9YFH?@|+2-16WvBO`L=VQ{N{Moy}3c!A$uhNp^O{%#5m=XX1a`|u*!
zPqM$Xe$x6&{v-KcTEPkbOdde-;Q!iNh~nXu87xTsH0-}%V2THRY5z;{Bj`67e*!)k
zzm{IX$@te!;?6^r6n}%0S9a0}I{=E8U)hPhgFV2UAI?BEeDwSdXU;Ee6=2T47GU=L
zl+It_{Fcst>HZ+yKcxGMaQ_kSPu9wP?SACVZ?Oebnfn`m{|jQ2hIJ^4I{+dY{V1a-
zaq0fLn{oPTdH+2_@b&4~wsr{-p!>IUe<ygUzLMS#<N}J+OOY_DIhN{^vjp>pKo!|Z
z7D;-4;j;?A-=z1S^nR4ypVIpk86br3%t++}4lNJR3GZ+5{ob_6wzkq|L;GsE0wcl8
zCkVw|Bn)HJ@)x=MTK;1hc<rZ>KPmLD<zJ-yjg<cp@<&R_Kk2mw&0VSIuY~-Uls}X5
zZ&LnF%Kz;O`9p9BHvcH(FF`z?{{*~e@}~ep0Vf<>h5oYx*j+}qPDTs(m^DcioH!%~
z2;@4ziCOtl{<_795j2b@iI0*1a5n#b2>w@clr0#ahMtV11O4V%8&&Nwf+Kf9BH2g!
z{R8aJ>Id^@=Lh3Uzu)wQ!l(h~^nkjGru6%h5`Mo@((h{xJAH6)0hi=U{7U%!P^}7k
T(8ip0J=C5@J^n+TEIZi0a!IcP

literal 0
HcmV?d00001

diff --git a/src/resources/alioth/test/mandelbrot/m8.bmp b/src/resources/alioth/test/mandelbrot/m8.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..d1bc70a7f94c9fda8f9cb842b3e0f5d0e60db6fe
GIT binary patch
literal 41
scmWGA;W9K+Ff`+0;9w8{!WxEujQ=G6%l`ZSPZmfs{$uzD6a&ft0O@=UBme*a

literal 0
HcmV?d00001

-- 
1.7.4.1


From 6e8654455dc472091ea2fe3c85c5263f276e2f17 Mon Sep 17 00:00:00 2001
From: Paul Michael Bauer <paul.michael.bauer@gmail.com>
Date: Sat, 10 Sep 2011 22:28:04 -0700
Subject: [PATCH 05/10] Remove unused files

---
 src/resources/alioth/mandelbrot/m256.bmp |  Bin 8203 -> 0 bytes
 src/resources/alioth/mandelbrot/m8.bmp   |  Bin 41 -> 0 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 src/resources/alioth/mandelbrot/m256.bmp
 delete mode 100644 src/resources/alioth/mandelbrot/m8.bmp

diff --git a/src/resources/alioth/mandelbrot/m256.bmp b/src/resources/alioth/mandelbrot/m256.bmp
deleted file mode 100644
index a3a20c1a1e99e786ddd69427a9bd4adeac70f042..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8203
zcmeHMPm5ed5bw9MCQCpzpr{Daa}ZYWuu(J$3U5FVZ}IBI8Sw)c(1V`dBjU|NjyVP-
z;K2{z&36zqm$2Xm@M*vVbI5{%qdS?l`tNpE^{YAv$;F1<*WJIW>gww1>h79%Upe>k
zs~6|+cTP=|exm>XZfk-0BQ}FH{z}mAS00~jc)VHjxXAw><$uJFf1%qhI0bi&88}=U
z({uQ~F*i9J_zj1jHHJ07)5fq9gz=9V`3>MKe+T%S5zq?y9SZZ)#ynueE5O<L!}zTJ
zuL-zd9|iXRlhbcz%s7GX+J3+}`>TfauU@H1_psuxe)xjk?0lfALkwzXapOf}ZoM=a
zgMR!NmS=lMeWTP4h${;W@L31Ax&OsbBEI$Z<=NjBHs-4;etzDZc>MNJjsLj|a}Qe+
zK0_(GyRUbFU{vQR-X6aZ`9G(qQhKc;ez(6yDca4?5&z@L`%e;rcGE@NG;|f4Zj<2c
zisGsZv$s^gP%mlP#BR(_l_;~!@Ou^c;JT@tQ2Ew%Q+Z(M5`gPvWhC>@<yXAC(4R)Z
zy|X%#PH{E+F2{dg;qf2K;mY)3XJv&1iObJtC^$J5|K6Pv?-9Yl?E)uJ{@||?9}s`3
zo-tn{{E3p?z!oe@X?+?6vHW$x4UMiGU_^Mi`Xov=rTNMD_TVTA3PA+ltV#tg72I$N
zjD1dU2EkZCIG0h`6#P2~B@-Yxnt;Xx32&U97~Y0s0<>5F!5+aKm;cu*h0PbkycG_x
zI>h|Z0r%AY0C>K+Jt=hB^7vwQ{ANx5;9%hXVSGo~a|e~t<9dASw@=);g>Vn6b~NTw
zrBdikRD&mI@4-?nu=fE~?{R(Kn18M-o%mwq>%b4~?NFItu)kycUL8cX^bHZf8D>;%
z>W`Hi-&DpQPsfKVhmLINd)4E<U6J1xc$fHMWpwyc9=N`Y-RbMuTi-tFQh%)Uj$rAV
z6@1}v?eXKzf3yEXj<4Gc@zo=TJM+Pvh2SB82ESc*m_Oj5J3Bffp%WkNM)9yb+LLd)
z$d<kZKgCZx9{4Ek<X?$?Ie{<wI9!kun<4x>`|W85s=4j2>AWJDbKm{bD?{v$UuXVy
z8=K@i*!i`jJ9YFH?@|+2-16WvBO`L=VQ{N{Moy}3c!A$uhNp^O{%#5m=XX1a`|u*!
zPqM$Xe$x6&{v-KcTEPkbOdde-;Q!iNh~nXu87xTsH0-}%V2THRY5z;{Bj`67e*!)k
zzm{IX$@te!;?6^r6n}%0S9a0}I{=E8U)hPhgFV2UAI?BEeDwSdXU;Ee6=2T47GU=L
zl+It_{Fcst>HZ+yKcxGMaQ_kSPu9wP?SACVZ?Oebnfn`m{|jQ2hIJ^4I{+dY{V1a-
zaq0fLn{oPTdH+2_@b&4~wsr{-p!>IUe<ygUzLMS#<N}J+OOY_DIhN{^vjp>pKo!|Z
z7D;-4;j;?A-=z1S^nR4ypVIpk86br3%t++}4lNJR3GZ+5{ob_6wzkq|L;GsE0wcl8
zCkVw|Bn)HJ@)x=MTK;1hc<rZ>KPmLD<zJ-yjg<cp@<&R_Kk2mw&0VSIuY~-Uls}X5
zZ&LnF%Kz;O`9p9BHvcH(FF`z?{{*~e@}~ep0Vf<>h5oYx*j+}qPDTs(m^DcioH!%~
z2;@4ziCOtl{<_795j2b@iI0*1a5n#b2>w@clr0#ahMtV11O4V%8&&Nwf+Kf9BH2g!
z{R8aJ>Id^@=Lh3Uzu)wQ!l(h~^nkjGru6%h5`Mo@((h{xJAH6)0hi=U{7U%!P^}7k
T(8ip0J=C5@J^n+TEIZi0a!IcP

diff --git a/src/resources/alioth/mandelbrot/m8.bmp b/src/resources/alioth/mandelbrot/m8.bmp
deleted file mode 100644
index d1bc70a7f94c9fda8f9cb842b3e0f5d0e60db6fe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 41
scmWGA;W9K+Ff`+0;9w8{!WxEujQ=G6%l`ZSPZmfs{$uzD6a&ft0O@=UBme*a

-- 
1.7.4.1


From 184a17f3c1840ad98697023a30d771379002c8a3 Mon Sep 17 00:00:00 2001
From: Paul Michael Bauer <paul.michael.bauer@gmail.com>
Date: Sat, 10 Sep 2011 22:43:13 -0700
Subject: [PATCH 06/10] moving resources again

---
 src/resources/alioth/test/mandelbrot/m256.bmp      |  Bin 8203 -> 0 bytes
 src/resources/alioth/test/mandelbrot/m8.bmp        |  Bin 41 -> 0 bytes
 src/test/resources/alioth/test/mandelbrot/m256.bmp |  Bin 0 -> 8203 bytes
 src/test/resources/alioth/test/mandelbrot/m8.bmp   |  Bin 0 -> 41 bytes
 4 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 src/resources/alioth/test/mandelbrot/m256.bmp
 delete mode 100644 src/resources/alioth/test/mandelbrot/m8.bmp
 create mode 100644 src/test/resources/alioth/test/mandelbrot/m256.bmp
 create mode 100644 src/test/resources/alioth/test/mandelbrot/m8.bmp

diff --git a/src/resources/alioth/test/mandelbrot/m256.bmp b/src/resources/alioth/test/mandelbrot/m256.bmp
deleted file mode 100644
index a3a20c1a1e99e786ddd69427a9bd4adeac70f042..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8203
zcmeHMPm5ed5bw9MCQCpzpr{Daa}ZYWuu(J$3U5FVZ}IBI8Sw)c(1V`dBjU|NjyVP-
z;K2{z&36zqm$2Xm@M*vVbI5{%qdS?l`tNpE^{YAv$;F1<*WJIW>gww1>h79%Upe>k
zs~6|+cTP=|exm>XZfk-0BQ}FH{z}mAS00~jc)VHjxXAw><$uJFf1%qhI0bi&88}=U
z({uQ~F*i9J_zj1jHHJ07)5fq9gz=9V`3>MKe+T%S5zq?y9SZZ)#ynueE5O<L!}zTJ
zuL-zd9|iXRlhbcz%s7GX+J3+}`>TfauU@H1_psuxe)xjk?0lfALkwzXapOf}ZoM=a
zgMR!NmS=lMeWTP4h${;W@L31Ax&OsbBEI$Z<=NjBHs-4;etzDZc>MNJjsLj|a}Qe+
zK0_(GyRUbFU{vQR-X6aZ`9G(qQhKc;ez(6yDca4?5&z@L`%e;rcGE@NG;|f4Zj<2c
zisGsZv$s^gP%mlP#BR(_l_;~!@Ou^c;JT@tQ2Ew%Q+Z(M5`gPvWhC>@<yXAC(4R)Z
zy|X%#PH{E+F2{dg;qf2K;mY)3XJv&1iObJtC^$J5|K6Pv?-9Yl?E)uJ{@||?9}s`3
zo-tn{{E3p?z!oe@X?+?6vHW$x4UMiGU_^Mi`Xov=rTNMD_TVTA3PA+ltV#tg72I$N
zjD1dU2EkZCIG0h`6#P2~B@-Yxnt;Xx32&U97~Y0s0<>5F!5+aKm;cu*h0PbkycG_x
zI>h|Z0r%AY0C>K+Jt=hB^7vwQ{ANx5;9%hXVSGo~a|e~t<9dASw@=);g>Vn6b~NTw
zrBdikRD&mI@4-?nu=fE~?{R(Kn18M-o%mwq>%b4~?NFItu)kycUL8cX^bHZf8D>;%
z>W`Hi-&DpQPsfKVhmLINd)4E<U6J1xc$fHMWpwyc9=N`Y-RbMuTi-tFQh%)Uj$rAV
z6@1}v?eXKzf3yEXj<4Gc@zo=TJM+Pvh2SB82ESc*m_Oj5J3Bffp%WkNM)9yb+LLd)
z$d<kZKgCZx9{4Ek<X?$?Ie{<wI9!kun<4x>`|W85s=4j2>AWJDbKm{bD?{v$UuXVy
z8=K@i*!i`jJ9YFH?@|+2-16WvBO`L=VQ{N{Moy}3c!A$uhNp^O{%#5m=XX1a`|u*!
zPqM$Xe$x6&{v-KcTEPkbOdde-;Q!iNh~nXu87xTsH0-}%V2THRY5z;{Bj`67e*!)k
zzm{IX$@te!;?6^r6n}%0S9a0}I{=E8U)hPhgFV2UAI?BEeDwSdXU;Ee6=2T47GU=L
zl+It_{Fcst>HZ+yKcxGMaQ_kSPu9wP?SACVZ?Oebnfn`m{|jQ2hIJ^4I{+dY{V1a-
zaq0fLn{oPTdH+2_@b&4~wsr{-p!>IUe<ygUzLMS#<N}J+OOY_DIhN{^vjp>pKo!|Z
z7D;-4;j;?A-=z1S^nR4ypVIpk86br3%t++}4lNJR3GZ+5{ob_6wzkq|L;GsE0wcl8
zCkVw|Bn)HJ@)x=MTK;1hc<rZ>KPmLD<zJ-yjg<cp@<&R_Kk2mw&0VSIuY~-Uls}X5
zZ&LnF%Kz;O`9p9BHvcH(FF`z?{{*~e@}~ep0Vf<>h5oYx*j+}qPDTs(m^DcioH!%~
z2;@4ziCOtl{<_795j2b@iI0*1a5n#b2>w@clr0#ahMtV11O4V%8&&Nwf+Kf9BH2g!
z{R8aJ>Id^@=Lh3Uzu)wQ!l(h~^nkjGru6%h5`Mo@((h{xJAH6)0hi=U{7U%!P^}7k
T(8ip0J=C5@J^n+TEIZi0a!IcP

diff --git a/src/resources/alioth/test/mandelbrot/m8.bmp b/src/resources/alioth/test/mandelbrot/m8.bmp
deleted file mode 100644
index d1bc70a7f94c9fda8f9cb842b3e0f5d0e60db6fe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 41
scmWGA;W9K+Ff`+0;9w8{!WxEujQ=G6%l`ZSPZmfs{$uzD6a&ft0O@=UBme*a

diff --git a/src/test/resources/alioth/test/mandelbrot/m256.bmp b/src/test/resources/alioth/test/mandelbrot/m256.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..a3a20c1a1e99e786ddd69427a9bd4adeac70f042
GIT binary patch
literal 8203
zcmeHMPm5ed5bw9MCQCpzpr{Daa}ZYWuu(J$3U5FVZ}IBI8Sw)c(1V`dBjU|NjyVP-
z;K2{z&36zqm$2Xm@M*vVbI5{%qdS?l`tNpE^{YAv$;F1<*WJIW>gww1>h79%Upe>k
zs~6|+cTP=|exm>XZfk-0BQ}FH{z}mAS00~jc)VHjxXAw><$uJFf1%qhI0bi&88}=U
z({uQ~F*i9J_zj1jHHJ07)5fq9gz=9V`3>MKe+T%S5zq?y9SZZ)#ynueE5O<L!}zTJ
zuL-zd9|iXRlhbcz%s7GX+J3+}`>TfauU@H1_psuxe)xjk?0lfALkwzXapOf}ZoM=a
zgMR!NmS=lMeWTP4h${;W@L31Ax&OsbBEI$Z<=NjBHs-4;etzDZc>MNJjsLj|a}Qe+
zK0_(GyRUbFU{vQR-X6aZ`9G(qQhKc;ez(6yDca4?5&z@L`%e;rcGE@NG;|f4Zj<2c
zisGsZv$s^gP%mlP#BR(_l_;~!@Ou^c;JT@tQ2Ew%Q+Z(M5`gPvWhC>@<yXAC(4R)Z
zy|X%#PH{E+F2{dg;qf2K;mY)3XJv&1iObJtC^$J5|K6Pv?-9Yl?E)uJ{@||?9}s`3
zo-tn{{E3p?z!oe@X?+?6vHW$x4UMiGU_^Mi`Xov=rTNMD_TVTA3PA+ltV#tg72I$N
zjD1dU2EkZCIG0h`6#P2~B@-Yxnt;Xx32&U97~Y0s0<>5F!5+aKm;cu*h0PbkycG_x
zI>h|Z0r%AY0C>K+Jt=hB^7vwQ{ANx5;9%hXVSGo~a|e~t<9dASw@=);g>Vn6b~NTw
zrBdikRD&mI@4-?nu=fE~?{R(Kn18M-o%mwq>%b4~?NFItu)kycUL8cX^bHZf8D>;%
z>W`Hi-&DpQPsfKVhmLINd)4E<U6J1xc$fHMWpwyc9=N`Y-RbMuTi-tFQh%)Uj$rAV
z6@1}v?eXKzf3yEXj<4Gc@zo=TJM+Pvh2SB82ESc*m_Oj5J3Bffp%WkNM)9yb+LLd)
z$d<kZKgCZx9{4Ek<X?$?Ie{<wI9!kun<4x>`|W85s=4j2>AWJDbKm{bD?{v$UuXVy
z8=K@i*!i`jJ9YFH?@|+2-16WvBO`L=VQ{N{Moy}3c!A$uhNp^O{%#5m=XX1a`|u*!
zPqM$Xe$x6&{v-KcTEPkbOdde-;Q!iNh~nXu87xTsH0-}%V2THRY5z;{Bj`67e*!)k
zzm{IX$@te!;?6^r6n}%0S9a0}I{=E8U)hPhgFV2UAI?BEeDwSdXU;Ee6=2T47GU=L
zl+It_{Fcst>HZ+yKcxGMaQ_kSPu9wP?SACVZ?Oebnfn`m{|jQ2hIJ^4I{+dY{V1a-
zaq0fLn{oPTdH+2_@b&4~wsr{-p!>IUe<ygUzLMS#<N}J+OOY_DIhN{^vjp>pKo!|Z
z7D;-4;j;?A-=z1S^nR4ypVIpk86br3%t++}4lNJR3GZ+5{ob_6wzkq|L;GsE0wcl8
zCkVw|Bn)HJ@)x=MTK;1hc<rZ>KPmLD<zJ-yjg<cp@<&R_Kk2mw&0VSIuY~-Uls}X5
zZ&LnF%Kz;O`9p9BHvcH(FF`z?{{*~e@}~ep0Vf<>h5oYx*j+}qPDTs(m^DcioH!%~
z2;@4ziCOtl{<_795j2b@iI0*1a5n#b2>w@clr0#ahMtV11O4V%8&&Nwf+Kf9BH2g!
z{R8aJ>Id^@=Lh3Uzu)wQ!l(h~^nkjGru6%h5`Mo@((h{xJAH6)0hi=U{7U%!P^}7k
T(8ip0J=C5@J^n+TEIZi0a!IcP

literal 0
HcmV?d00001

diff --git a/src/test/resources/alioth/test/mandelbrot/m8.bmp b/src/test/resources/alioth/test/mandelbrot/m8.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..d1bc70a7f94c9fda8f9cb842b3e0f5d0e60db6fe
GIT binary patch
literal 41
scmWGA;W9K+Ff`+0;9w8{!WxEujQ=G6%l`ZSPZmfs{$uzD6a&ft0O@=UBme*a

literal 0
HcmV?d00001

-- 
1.7.4.1


From 2a8087369a935f410ce764fa016ca80472e79cee Mon Sep 17 00:00:00 2001
From: Paul Michael Bauer <paul.michael.bauer@gmail.com>
Date: Sun, 11 Sep 2011 01:23:50 -0700
Subject: [PATCH 07/10] Added utility functions and tests (to be used in tests)

---
 pom.xml                                            |    6 ++++
 src/main/clojure/alioth/util/core.clj              |   25 ++++++++++++++++++++
 src/main/clojure/clojure/test/benchmark.clj        |    1 -
 src/test/clojure/clojure/test/benchmark_test.clj   |    1 -
 src/test/clojure/test/alioth/util/core.clj         |   20 ++++++++++++++++
 src/test/resources/alioth/test/mandelbrot/m256.bmp |  Bin 8203 -> 0 bytes
 src/test/resources/alioth/test/mandelbrot/m8.bmp   |  Bin 41 -> 0 bytes
 src/test/resources/test/alioth/mandelbrot/m256.bmp |  Bin 0 -> 8203 bytes
 src/test/resources/test/alioth/mandelbrot/m8.bmp   |  Bin 0 -> 41 bytes
 9 files changed, 51 insertions(+), 2 deletions(-)
 create mode 100644 src/main/clojure/alioth/util/core.clj
 delete mode 100644 src/main/clojure/clojure/test/benchmark.clj
 delete mode 100644 src/test/clojure/clojure/test/benchmark_test.clj
 create mode 100644 src/test/clojure/test/alioth/util/core.clj
 delete mode 100644 src/test/resources/alioth/test/mandelbrot/m256.bmp
 delete mode 100644 src/test/resources/alioth/test/mandelbrot/m8.bmp
 create mode 100644 src/test/resources/test/alioth/mandelbrot/m256.bmp
 create mode 100644 src/test/resources/test/alioth/mandelbrot/m8.bmp

diff --git a/pom.xml b/pom.xml
index 862630a..607280c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,6 +22,12 @@
       <artifactId>clojure</artifactId>
       <version>1.3.0-beta3</version>
     </dependency>
+    <dependency>
+      <groupId>swank-clojure</groupId>
+      <artifactId>swank-clojure</artifactId>
+      <version>1.4.0-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/src/main/clojure/alioth/util/core.clj b/src/main/clojure/alioth/util/core.clj
new file mode 100644
index 0000000..ced78a4
--- /dev/null
+++ b/src/main/clojure/alioth/util/core.clj
@@ -0,0 +1,25 @@
+(ns alioth.util.core 
+    (:use [clojure.java.io :only [resource]])
+    (:import [java.net URL]
+             [java.io InputStream]
+             [clojure.lang Namespace])
+    (:require [clojure.string :as str]))
+
+(defn ^URL ns-resource
+  "Returns the url for a resource relative to the given namespace."
+  [^Namespace ns resource-name]
+  (-> (str ns)
+      (str/replace \. \/)
+      (str \/ resource-name)
+      (resource)))
+
+(defn streams=
+  "Predicate that is true iff the contents of the streams are identical."
+  [& streams]
+  (letfn [(advance [] (map (fn [^InputStream s] (.read s)) streams))]
+    (loop [nth-chars (advance)]
+      (if (apply not= nth-chars)
+        false
+        (if (= -1 (first nth-chars)) 
+          true
+          (recur (advance))))))) 
diff --git a/src/main/clojure/clojure/test/benchmark.clj b/src/main/clojure/clojure/test/benchmark.clj
deleted file mode 100644
index 25aebfd..0000000
--- a/src/main/clojure/clojure/test/benchmark.clj
+++ /dev/null
@@ -1 +0,0 @@
-(ns clojure.test.benchmark)
\ No newline at end of file
diff --git a/src/test/clojure/clojure/test/benchmark_test.clj b/src/test/clojure/clojure/test/benchmark_test.clj
deleted file mode 100644
index 453ea28..0000000
--- a/src/test/clojure/clojure/test/benchmark_test.clj
+++ /dev/null
@@ -1 +0,0 @@
-(ns clojure.test.benchmark-test)
\ No newline at end of file
diff --git a/src/test/clojure/test/alioth/util/core.clj b/src/test/clojure/test/alioth/util/core.clj
new file mode 100644
index 0000000..cd25c8c
--- /dev/null
+++ b/src/test/clojure/test/alioth/util/core.clj
@@ -0,0 +1,20 @@
+(ns test.alioth.util.core
+    (:use [alioth.util.core]
+          [clojure.test])
+    (:import [java.io ByteArrayInputStream]))
+
+(deftest test-streams=
+  (let [bais (fn [s] (ByteArrayInputStream. (byte-array (map byte s))))]
+    (are [description inputs expected] (= expected (apply streams= inputs))
+         "one stream" [(bais [0 1 2])] true
+         "two equal streams" (map bais [[0 1 2] [0 1 2]]) true 
+         "many equal streams" (repeat 10 (bais (repeat 10 0))) true
+         "two unequal streams" (map bais [[0 1 2] [0 1 1]]) false
+         "many unequal streams" (conj (repeat 10 (bais (repeat 10 0))) 
+                                      (bais (repeat 9 0))) false 
+         )))
+
+(deftest test-ns-resource
+  (let [parent-ns (create-ns 'test.alioth.util)]
+    (is (ns-resource parent-ns "core.clj"))
+    (is (not (ns-resource parent-ns "CAFEBABE.clj")))))
diff --git a/src/test/resources/alioth/test/mandelbrot/m256.bmp b/src/test/resources/alioth/test/mandelbrot/m256.bmp
deleted file mode 100644
index a3a20c1a1e99e786ddd69427a9bd4adeac70f042..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8203
zcmeHMPm5ed5bw9MCQCpzpr{Daa}ZYWuu(J$3U5FVZ}IBI8Sw)c(1V`dBjU|NjyVP-
z;K2{z&36zqm$2Xm@M*vVbI5{%qdS?l`tNpE^{YAv$;F1<*WJIW>gww1>h79%Upe>k
zs~6|+cTP=|exm>XZfk-0BQ}FH{z}mAS00~jc)VHjxXAw><$uJFf1%qhI0bi&88}=U
z({uQ~F*i9J_zj1jHHJ07)5fq9gz=9V`3>MKe+T%S5zq?y9SZZ)#ynueE5O<L!}zTJ
zuL-zd9|iXRlhbcz%s7GX+J3+}`>TfauU@H1_psuxe)xjk?0lfALkwzXapOf}ZoM=a
zgMR!NmS=lMeWTP4h${;W@L31Ax&OsbBEI$Z<=NjBHs-4;etzDZc>MNJjsLj|a}Qe+
zK0_(GyRUbFU{vQR-X6aZ`9G(qQhKc;ez(6yDca4?5&z@L`%e;rcGE@NG;|f4Zj<2c
zisGsZv$s^gP%mlP#BR(_l_;~!@Ou^c;JT@tQ2Ew%Q+Z(M5`gPvWhC>@<yXAC(4R)Z
zy|X%#PH{E+F2{dg;qf2K;mY)3XJv&1iObJtC^$J5|K6Pv?-9Yl?E)uJ{@||?9}s`3
zo-tn{{E3p?z!oe@X?+?6vHW$x4UMiGU_^Mi`Xov=rTNMD_TVTA3PA+ltV#tg72I$N
zjD1dU2EkZCIG0h`6#P2~B@-Yxnt;Xx32&U97~Y0s0<>5F!5+aKm;cu*h0PbkycG_x
zI>h|Z0r%AY0C>K+Jt=hB^7vwQ{ANx5;9%hXVSGo~a|e~t<9dASw@=);g>Vn6b~NTw
zrBdikRD&mI@4-?nu=fE~?{R(Kn18M-o%mwq>%b4~?NFItu)kycUL8cX^bHZf8D>;%
z>W`Hi-&DpQPsfKVhmLINd)4E<U6J1xc$fHMWpwyc9=N`Y-RbMuTi-tFQh%)Uj$rAV
z6@1}v?eXKzf3yEXj<4Gc@zo=TJM+Pvh2SB82ESc*m_Oj5J3Bffp%WkNM)9yb+LLd)
z$d<kZKgCZx9{4Ek<X?$?Ie{<wI9!kun<4x>`|W85s=4j2>AWJDbKm{bD?{v$UuXVy
z8=K@i*!i`jJ9YFH?@|+2-16WvBO`L=VQ{N{Moy}3c!A$uhNp^O{%#5m=XX1a`|u*!
zPqM$Xe$x6&{v-KcTEPkbOdde-;Q!iNh~nXu87xTsH0-}%V2THRY5z;{Bj`67e*!)k
zzm{IX$@te!;?6^r6n}%0S9a0}I{=E8U)hPhgFV2UAI?BEeDwSdXU;Ee6=2T47GU=L
zl+It_{Fcst>HZ+yKcxGMaQ_kSPu9wP?SACVZ?Oebnfn`m{|jQ2hIJ^4I{+dY{V1a-
zaq0fLn{oPTdH+2_@b&4~wsr{-p!>IUe<ygUzLMS#<N}J+OOY_DIhN{^vjp>pKo!|Z
z7D;-4;j;?A-=z1S^nR4ypVIpk86br3%t++}4lNJR3GZ+5{ob_6wzkq|L;GsE0wcl8
zCkVw|Bn)HJ@)x=MTK;1hc<rZ>KPmLD<zJ-yjg<cp@<&R_Kk2mw&0VSIuY~-Uls}X5
zZ&LnF%Kz;O`9p9BHvcH(FF`z?{{*~e@}~ep0Vf<>h5oYx*j+}qPDTs(m^DcioH!%~
z2;@4ziCOtl{<_795j2b@iI0*1a5n#b2>w@clr0#ahMtV11O4V%8&&Nwf+Kf9BH2g!
z{R8aJ>Id^@=Lh3Uzu)wQ!l(h~^nkjGru6%h5`Mo@((h{xJAH6)0hi=U{7U%!P^}7k
T(8ip0J=C5@J^n+TEIZi0a!IcP

diff --git a/src/test/resources/alioth/test/mandelbrot/m8.bmp b/src/test/resources/alioth/test/mandelbrot/m8.bmp
deleted file mode 100644
index d1bc70a7f94c9fda8f9cb842b3e0f5d0e60db6fe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 41
scmWGA;W9K+Ff`+0;9w8{!WxEujQ=G6%l`ZSPZmfs{$uzD6a&ft0O@=UBme*a

diff --git a/src/test/resources/test/alioth/mandelbrot/m256.bmp b/src/test/resources/test/alioth/mandelbrot/m256.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..a3a20c1a1e99e786ddd69427a9bd4adeac70f042
GIT binary patch
literal 8203
zcmeHMPm5ed5bw9MCQCpzpr{Daa}ZYWuu(J$3U5FVZ}IBI8Sw)c(1V`dBjU|NjyVP-
z;K2{z&36zqm$2Xm@M*vVbI5{%qdS?l`tNpE^{YAv$;F1<*WJIW>gww1>h79%Upe>k
zs~6|+cTP=|exm>XZfk-0BQ}FH{z}mAS00~jc)VHjxXAw><$uJFf1%qhI0bi&88}=U
z({uQ~F*i9J_zj1jHHJ07)5fq9gz=9V`3>MKe+T%S5zq?y9SZZ)#ynueE5O<L!}zTJ
zuL-zd9|iXRlhbcz%s7GX+J3+}`>TfauU@H1_psuxe)xjk?0lfALkwzXapOf}ZoM=a
zgMR!NmS=lMeWTP4h${;W@L31Ax&OsbBEI$Z<=NjBHs-4;etzDZc>MNJjsLj|a}Qe+
zK0_(GyRUbFU{vQR-X6aZ`9G(qQhKc;ez(6yDca4?5&z@L`%e;rcGE@NG;|f4Zj<2c
zisGsZv$s^gP%mlP#BR(_l_;~!@Ou^c;JT@tQ2Ew%Q+Z(M5`gPvWhC>@<yXAC(4R)Z
zy|X%#PH{E+F2{dg;qf2K;mY)3XJv&1iObJtC^$J5|K6Pv?-9Yl?E)uJ{@||?9}s`3
zo-tn{{E3p?z!oe@X?+?6vHW$x4UMiGU_^Mi`Xov=rTNMD_TVTA3PA+ltV#tg72I$N
zjD1dU2EkZCIG0h`6#P2~B@-Yxnt;Xx32&U97~Y0s0<>5F!5+aKm;cu*h0PbkycG_x
zI>h|Z0r%AY0C>K+Jt=hB^7vwQ{ANx5;9%hXVSGo~a|e~t<9dASw@=);g>Vn6b~NTw
zrBdikRD&mI@4-?nu=fE~?{R(Kn18M-o%mwq>%b4~?NFItu)kycUL8cX^bHZf8D>;%
z>W`Hi-&DpQPsfKVhmLINd)4E<U6J1xc$fHMWpwyc9=N`Y-RbMuTi-tFQh%)Uj$rAV
z6@1}v?eXKzf3yEXj<4Gc@zo=TJM+Pvh2SB82ESc*m_Oj5J3Bffp%WkNM)9yb+LLd)
z$d<kZKgCZx9{4Ek<X?$?Ie{<wI9!kun<4x>`|W85s=4j2>AWJDbKm{bD?{v$UuXVy
z8=K@i*!i`jJ9YFH?@|+2-16WvBO`L=VQ{N{Moy}3c!A$uhNp^O{%#5m=XX1a`|u*!
zPqM$Xe$x6&{v-KcTEPkbOdde-;Q!iNh~nXu87xTsH0-}%V2THRY5z;{Bj`67e*!)k
zzm{IX$@te!;?6^r6n}%0S9a0}I{=E8U)hPhgFV2UAI?BEeDwSdXU;Ee6=2T47GU=L
zl+It_{Fcst>HZ+yKcxGMaQ_kSPu9wP?SACVZ?Oebnfn`m{|jQ2hIJ^4I{+dY{V1a-
zaq0fLn{oPTdH+2_@b&4~wsr{-p!>IUe<ygUzLMS#<N}J+OOY_DIhN{^vjp>pKo!|Z
z7D;-4;j;?A-=z1S^nR4ypVIpk86br3%t++}4lNJR3GZ+5{ob_6wzkq|L;GsE0wcl8
zCkVw|Bn)HJ@)x=MTK;1hc<rZ>KPmLD<zJ-yjg<cp@<&R_Kk2mw&0VSIuY~-Uls}X5
zZ&LnF%Kz;O`9p9BHvcH(FF`z?{{*~e@}~ep0Vf<>h5oYx*j+}qPDTs(m^DcioH!%~
z2;@4ziCOtl{<_795j2b@iI0*1a5n#b2>w@clr0#ahMtV11O4V%8&&Nwf+Kf9BH2g!
z{R8aJ>Id^@=Lh3Uzu)wQ!l(h~^nkjGru6%h5`Mo@((h{xJAH6)0hi=U{7U%!P^}7k
T(8ip0J=C5@J^n+TEIZi0a!IcP

literal 0
HcmV?d00001

diff --git a/src/test/resources/test/alioth/mandelbrot/m8.bmp b/src/test/resources/test/alioth/mandelbrot/m8.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..d1bc70a7f94c9fda8f9cb842b3e0f5d0e60db6fe
GIT binary patch
literal 41
scmWGA;W9K+Ff`+0;9w8{!WxEujQ=G6%l`ZSPZmfs{$uzD6a&ft0O@=UBme*a

literal 0
HcmV?d00001

-- 
1.7.4.1


From 450642c1097ca471f1f3a24c586b54e23cbe6375 Mon Sep 17 00:00:00 2001
From: Paul Michael Bauer <paul.michael.bauer@gmail.com>
Date: Sun, 11 Sep 2011 01:53:28 -0700
Subject: [PATCH 08/10] The absence of a .gitignore was sorely missed

---
 .gitignore |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
 create mode 100644 .gitignore

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e56e5cb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+classes
+target
+lib
+*.jar
+docs
+script/maven-classpath
+.lein*
+project.clj
-- 
1.7.4.1


From de8599e6c8dccde7b51ea208848ba1bf2bdfb6eb Mon Sep 17 00:00:00 2001
From: Paul Michael Bauer <paul.michael.bauer@gmail.com>
Date: Sun, 11 Sep 2011 16:20:47 -0700
Subject: [PATCH 09/10] more script changes, prep for java perf test commit

---
 script/java_run      |    7 +++++++
 script/repl          |    3 +--
 script/run           |    3 +--
 script/script_common |    6 ------
 4 files changed, 9 insertions(+), 10 deletions(-)
 create mode 100755 script/java_run
 delete mode 100755 script/script_common

diff --git a/script/java_run b/script/java_run
new file mode 100755
index 0000000..7524503
--- /dev/null
+++ b/script/java_run
@@ -0,0 +1,7 @@
+#!/bin/sh
+BASE_DIR=$(dirname $0)/..
+TARGET_CLASSPATH=`ls -d ${BASE_DIR}/target/*class* | tr '\n' :`
+MAVEN_CLASSPATH=`cat ${BASE_DIR}/script/maven-classpath`
+CLASSPATH=${TARGET_CLASSPATH}${BASE_DIR}/src/main/clojure:${MAVEN_CLASSPATH}
+
+java -server -XX:+AggressiveOpts -cp "${CLASSPATH}" $@
diff --git a/script/repl b/script/repl
index 26f1f34..4dbb138 100755
--- a/script/repl
+++ b/script/repl
@@ -1,3 +1,2 @@
 #!/bin/sh
-. $(dirname $0)/script_common
-${CMD_BASE} -r
+$(dirname $0)/java_run clojure.main -r
diff --git a/script/run b/script/run
index c301e2e..1cda15d 100755
--- a/script/run
+++ b/script/run
@@ -1,3 +1,2 @@
 #!/bin/sh
-. $(dirname $0)/script_common
-${CMD_BASE} -m $@
+$(dirname $0)/java_run clojure.main -m $@
diff --git a/script/script_common b/script/script_common
deleted file mode 100755
index c3e01ae..0000000
--- a/script/script_common
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-BASE_DIR=$(dirname $0)/..
-TARGET_CLASSPATH=`ls -d ${BASE_DIR}/target/*class* | tr '\n' :`
-MAVEN_CLASSPATH=`cat ${BASE_DIR}/script/maven-classpath`
-CLASSPATH=${TARGET_CLASSPATH}${BASE_DIR}/src/main/clojure:${MAVEN_CLASSPATH}
-CMD_BASE="java -server -XX:+AggressiveOpts -cp ${CLASSPATH} clojure.main"
-- 
1.7.4.1


From 8a598898652e8f714e044ba644a6b723ea802f05 Mon Sep 17 00:00:00 2001
From: Paul Michael Bauer <paul.michael.bauer@gmail.com>
Date: Tue, 13 Sep 2011 03:49:55 -0700
Subject: [PATCH 10/10] Initial revision of mandelbrot with correctness tests

---
 src/main/clojure/alioth/fasta_redux.clj          |    2 +-
 src/main/clojure/alioth/mandelbrot.clj           |  103 ++++++++++++++++++++++
 src/main/java/alioth/java/mandelbrot.java        |   96 ++++++++++++++++++++
 src/test/clojure/test/alioth/mandelbrot.clj      |   45 ++++++++++
 src/test/resources/test/alioth/mandelbrot/m8.bmp |  Bin 41 -> 15 bytes
 5 files changed, 245 insertions(+), 1 deletions(-)
 create mode 100644 src/main/clojure/alioth/mandelbrot.clj
 create mode 100644 src/main/java/alioth/java/mandelbrot.java
 create mode 100644 src/test/clojure/test/alioth/mandelbrot.clj

diff --git a/src/main/clojure/alioth/fasta_redux.clj b/src/main/clojure/alioth/fasta_redux.clj
index a5dd460..529bf7b 100644
--- a/src/main/clojure/alioth/fasta_redux.clj
+++ b/src/main/clojure/alioth/fasta_redux.clj
@@ -7,7 +7,7 @@
 ;   the terms of this license.
 ;   You must not remove this notice, or any other, from this software.
 
-;   Alioth benchmarks: http://shootout.alioth.debian.org/u64q/benchmark.php?test=binarytrees&lang=all
+;   Alioth benchmarks: http://shootout.alioth.debian.org/u64q/benchmark.php?test=fasta
 
 (ns alioth.fasta-redux
   (:import [java.io OutputStream]))
diff --git a/src/main/clojure/alioth/mandelbrot.clj b/src/main/clojure/alioth/mandelbrot.clj
new file mode 100644
index 0000000..a8528e7
--- /dev/null
+++ b/src/main/clojure/alioth/mandelbrot.clj
@@ -0,0 +1,103 @@
+;   Copyright (c) Rich Hickey and contributors.
+;   All rights reserved.
+;   The use and distribution terms for this software are covered by the
+;   Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+;   which can be found in the file epl-v10.html at the root of this distribution.
+;   By using this software in any fashion, you are agreeing to be bound by
+;   the terms of this license.
+;   You must not remove this notice, or any other, from this software.
+;
+;   Alioth benchmarks: http://shootout.alioth.debian.org/u64q/benchmark.php?test=mandelbrot
+;   Partly inspired by: http://shootout.alioth.debian.org/u32/benchmark.php?test=mandelbrot&lang=java
+(ns alioth.mandelbrot 
+  (:import [alioth.java mandelbrot]
+           [java.io OutputStream BufferedOutputStream])
+  (:gen-class))
+
+(set! *warn-on-reflection* true)
+(set! *unchecked-math* true)
+
+(def ^:const MAX_ITERATIONS 49)
+
+(defmacro for-loop [[binding pred adv] & body]
+  `(loop [~@binding]
+     (when ~pred
+       ~@body
+       (recur ~adv))))
+
+(definterface MandelbrotOps
+  (generate [])
+  (putLine [^long y])
+  (^byte getByte [^long x ^long y])
+  (^long getByte_inner [^long x ^long y ^long i]))
+
+(deftype MandelbrotJob [^bytes out ^long n ^long m ^doubles crb ^doubles cib]
+  MandelbrotOps
+
+  (generate [this]
+    (let [yIdx (atom -1)
+          ^Runnable runner (reify Runnable
+                             (run [_] (let [y (swap! yIdx inc)]
+                                        (if (< y n) (do (.putLine this y) (recur))))))
+          pool (map (fn [_] (Thread. runner)) (range (* 2 (.availableProcessors (Runtime/getRuntime)))))]
+      (doseq [^Thread thread pool]
+        (.start thread)) 
+      (doseq [^Thread thread pool]
+        (.join thread))))
+
+  (putLine [this y]
+    (let [offset (* y m)]
+      (for-loop [(xb 0) (< xb m) (inc xb)]
+        (aset out (+ offset xb) (.getByte this (* 8 xb) y)))))
+
+  (getByte [this x y]
+    (loop [i 0 res 0]
+      (if (< i 8)
+        (recur (+ i 2) (+ (bit-shift-left res 2)
+                          (.getByte_inner this x y i)))
+        (byte (bit-xor res -1)))))
+  
+  (getByte_inner [_ x y i]
+    (let [ciby     (aget cib y)
+          crbx+i   (aget crb (+ x i))
+          crbx+i+1 (aget crb (+ x i 1))]
+      (loop [j 0
+             zr1 crbx+i   zi1 ciby
+             zr2 crbx+i+1 zi2 ciby 
+             b 0]
+            (if (< j MAX_ITERATIONS)
+              (let [nzr1 (+ crbx+i   (- (* zr1 zr1) (* zi1 zi1))) 
+                    nzi1 (+ ciby (* zr1 zi1 2))
+                    nzr2 (+ crbx+i+1 (- (* zr2 zr2) (* zi2 zi2)))
+                    nzi2 (+ ciby (* zr2 zi2 2))
+                    nb (if (> (+ (* nzr1 nzr1) (* nzi1 nzi1)) 4) (bit-or b 2) b)
+                    nb (if (> (+ (* nzr2 nzr2) (* nzi2 nzi2)) 4) (bit-or nb 1) nb)]
+                (if (= nb 3)
+                  nb
+                  (recur (inc j) nzr1 nzi1 nzr2 nzi2 nb)))
+              b)))))
+
+(defn ^MandelbrotJob compute-mandelbrot [^long n]
+  (let [n+7 (+ n 7)
+        m (/ n+7 8)
+        ^bytes out (byte-array (* n m))
+        ^doubles crb (double-array n+7)
+        ^doubles cib (double-array n+7)
+        invN (/ 2.0 n)]
+    (for-loop [(i 0) (< i n) (inc i)]
+      (aset crb i (- (* i invN) 1.5))
+      (aset cib i (- (* i invN) 1.0)))
+    (let [^MandelbrotJob job (MandelbrotJob. out n m crb cib)]
+      (.generate job) job)))
+
+(defn write-bmp [^MandelbrotJob job ^OutputStream outStream]
+  (let [^bytes out (.out job)
+        len (* (.m job) (.n job))] ; (.length out) <-- won't compile ??
+    (.write outStream (.getBytes (str "P4\n" (.n job) " " (.n job) "\n"))) 
+    (.write outStream out 0 len) ; puzzling bug, just (.write outStream out) prints garbage
+    outStream))
+
+(defn -main [& args]
+  (let [n (if (first args) (Integer/parseInt (first args)) 16000)]
+    (with-open [outStream (BufferedOutputStream. System/out)]
+      (write-bmp (compute-mandelbrot n) outStream))))
diff --git a/src/main/java/alioth/java/mandelbrot.java b/src/main/java/alioth/java/mandelbrot.java
new file mode 100644
index 0000000..6bf101a
--- /dev/null
+++ b/src/main/java/alioth/java/mandelbrot.java
@@ -0,0 +1,96 @@
+
+/* Adapted from:
+ * http://shootout.alioth.debian.org/u32/benchmark.php?test=mandelbrot&lang=java
+ *
+ * The Computer Language Benchmarks Game
+ * http://shootout.alioth.debian.org/
+ *
+ * contributed by Stefan Krause
+ * slightly modified by Chad Whipkey
+ * parallelized by Colin D Bennett 2008-10-04
+ * reduce synchronization cost by The Anh Tran
+ * optimizations and refactoring by Enotus 2010-11-11
+ *
+ * Slightly modified for testability by Paul M Bauer
+ */
+package alioth.java;
+
+import java.io.*;
+import java.util.concurrent.atomic.AtomicInteger;
+
+public final class mandelbrot {
+    static byte[][] out;
+    static AtomicInteger yCt;
+    static double[] Crb;
+    static double[] Cib;
+
+    public static int getByte(int x, int y){
+        int res=0;
+        for(int i=0;i<8;i+=2){
+            double Zr1=Crb[x+i];
+            double Zi1=Cib[y];
+
+            double Zr2=Crb[x+i+1];
+            double Zi2=Cib[y];
+
+            int b=0;
+            int j=49;do{
+                double nZr1=Zr1*Zr1-Zi1*Zi1+Crb[x+i];
+                double nZi1=Zr1*Zi1+Zr1*Zi1+Cib[y];
+                Zr1=nZr1;Zi1=nZi1;
+
+                double nZr2=Zr2*Zr2-Zi2*Zi2+Crb[x+i+1];
+                double nZi2=Zr2*Zi2+Zr2*Zi2+Cib[y];
+                Zr2=nZr2;Zi2=nZi2;
+
+                if(Zr1*Zr1+Zi1*Zi1>4) b|=2;
+                if(Zr2*Zr2+Zi2*Zi2>4) b|=1;
+                if(b==3) break;
+            }while(--j>0);
+            res=(res<<2)+b;
+        }
+        return res^-1;
+    }
+
+    static void putLine(int y, byte[] line){
+        for (int xb=0; xb<line.length; xb++)
+            line[xb]=(byte)getByte(xb*8,y);
+    }
+
+    public static byte[][] computeMandelbrot(int N) throws Exception {
+        Crb=new double[N+7]; Cib=new double[N+7];
+        double invN=2.0/N; for(int i=0;i<N;i++){ Cib[i]=i*invN-1.0; Crb[i]=i*invN-1.5; }
+        yCt=new AtomicInteger();
+        out=new byte[N][(N+7)/8];
+
+        Thread[] pool=new Thread[2*Runtime.getRuntime().availableProcessors()];
+        for (int i=0;i<pool.length;i++)
+            pool[i]=new Thread(){
+                public void run() {
+                     int y; while((y=yCt.getAndIncrement())<out.length) putLine(y,out[y]);
+                }
+            };
+        for (Thread t:pool) t.start();
+        for (Thread t:pool) t.join();
+
+        return out;
+    }
+
+    public static OutputStream write(byte[][] out, OutputStream stream) throws Exception {
+        int N = out.length;
+        stream.write(("P4\n"+N+" "+N+"\n").getBytes());
+        for(int i=0;i<N;i++) stream.write(out[i]);
+        stream.flush();
+        return stream;
+    }
+
+    public static void main(String[] args) throws Exception {
+        int N=6000;
+        if (args.length>=1) N=Integer.parseInt(args[0]);
+
+        out = computeMandelbrot(N);
+        OutputStream stream = new BufferedOutputStream(System.out);
+        write(out, stream);
+        stream.close();
+    }
+}
diff --git a/src/test/clojure/test/alioth/mandelbrot.clj b/src/test/clojure/test/alioth/mandelbrot.clj
new file mode 100644
index 0000000..876980b
--- /dev/null
+++ b/src/test/clojure/test/alioth/mandelbrot.clj
@@ -0,0 +1,45 @@
+;   Copyright (c) Rich Hickey and contributors.
+;   All rights reserved.
+;   The use and distribution terms for this software are covered by the
+;   Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+;   which can be found in the file epl-v10.html at the root of this distribution.
+;   By using this software in any fashion, you are agreeing to be bound by
+;   the terms of this license.
+;   You must not remove this notice, or any other, from this software.
+(ns test.alioth.mandelbrot
+    (:use [alioth.mandelbrot]
+          [alioth.util.core]
+          [clojure.java.io :only [input-stream]]
+          [clojure.test])
+    (:import [java.io ByteArrayOutputStream
+                      ByteArrayInputStream]
+             [alioth.java mandelbrot]))
+
+(def ^:private master-files {8   "m8.bmp",
+                             256 "m256.bmp"})
+
+(def ^:private this-ns *ns*) ; work around bug in com.theoryinpractice.clojure.testrunner 
+                             ; leiningen has a similar bug, namely,
+                             ; the runner hijacks the current namepsace.
+
+(defn- resource-stream [file-name]
+  (input-stream (ns-resource this-ns file-name)))
+
+(defn- matches-master [dimension mandelbrot-fn write-fn]
+  (let [tmp (mandelbrot-fn dimension)]
+    (with-open [outStream (write-fn tmp
+                                    (ByteArrayOutputStream.))
+                inStream (ByteArrayInputStream. (.toByteArray outStream))
+                masterInStream (resource-stream (master-files dimension))]
+      (streams= inStream masterInStream))))
+
+
+(deftest test-mandelbrot-correctness
+  (let [java-mandelbrot #(mandelbrot/computeMandelbrot %)
+        java-write      #(mandelbrot/write %1 %2)]
+    (are [dimension mandelbrot-fn write-fn] (matches-master dimension mandelbrot-fn write-fn)
+         8 java-mandelbrot java-write
+         256 java-mandelbrot java-write
+         8 compute-mandelbrot write-bmp
+         256 compute-mandelbrot write-bmp
+         )))
diff --git a/src/test/resources/test/alioth/mandelbrot/m8.bmp b/src/test/resources/test/alioth/mandelbrot/m8.bmp
index d1bc70a7f94c9fda8f9cb842b3e0f5d0e60db6fe..cea1d0e27384532d48be3c01eb75d9bffaaf22ca 100644
GIT binary patch
literal 15
WcmWGA;j&P$;9_Fn*Z;52&j0`vp8}=;

literal 41
scmWGA;W9K+Ff`+0;9w8{!WxEujQ=G6%l`ZSPZmfs{$uzD6a&ft0O@=UBme*a

-- 
1.7.4.1

