Updated local micro-benchmarks, added support for testing json-simple variant.

diff --git a/build.xml b/build.xml
index f1b38f0..9673901 100644
--- a/build.xml
+++ b/build.xml
@@ -101,7 +101,7 @@
         <echo message = "---------------------------------------------------" />
         <echo message = "1)  readme - Displays this information (default target)." />
         <echo message = "2)  clean - Remove any generated files/directories." />
-        <echo message = "3)  compile.core - Compile core ${ant.project.name} code." />
+        <echo message = "3)  compile.all - Compile all code for ${ant.project.name}." />
         <echo message = "4)  jars - Compile and create all jars for non-test ${ant.project.name} code (see below for specific ones)." />
         <echo message = "4b)  jar.asl - Compile and create jar for non-test ${ant.project.name} cod, under Apache (2.0) license." />
         <echo message = "5)  javadoc - Generate ${ant.project.name} code documentation." />
@@ -153,7 +153,9 @@
         <delete file="cobertura.ser" />
     </target>
 
-    <target name="compile" depends="compile.core, compile.mapper, compile.extra, compile.test" />
+    <target name="compile" depends="compile.all" />
+    <target name="compile.all" depends="compile.main, compile.extra, compile.test, compile.perf" />
+    <target name="compile.main" depends="compile.core, compile.mapper" />
 
     <target name="compile.core" depends="prepare">
         <javac srcdir="${dir.src.java}" destdir="${dir.build.classes}"
@@ -178,7 +180,7 @@
         </javac>
     </target>
 
-    <target name="compile.extra" depends="compile.core">
+    <target name="compile.extra" depends="compile.main">
         <javac srcdir="${dir.src.java}" destdir="${dir.build.classes}"
             source="1.5" target="1.5" debug="true"
         >
@@ -189,7 +191,7 @@
         </javac>
     </target>
 
-    <target name="compile-perf" depends="compile">
+    <target name="compile.perf" depends="compile.main">
       <mkdir dir="${dir.perf.classes}" />
         <!-- Let's also compile micro-benchmarks... -->
         <javac srcdir="${dir.src}/perf" destdir="${dir.perf.classes}" debug="false"
@@ -216,7 +218,7 @@
     <!-- Jackson requires Java5 (enums, some generics) -->
     <property name="REQ_JDK_VERSION" value="J2SE-1.5" />
 
-    <target name="jar.asl" depends="compile.core">
+    <target name="jar.asl" depends="compile.all">
         <osgiJar
          outputdir="${dir.build}"
          bundleName="${IMPL_TITLE}"
@@ -269,7 +271,7 @@
       </bundle>
     </target> 
 
-    <target name="jar.lgpl" depends="compile.core">
+    <target name="jar.lgpl" depends="compile.all">
         <osgiJar
          outputdir="${dir.build}"
          bundleName="${IMPL_TITLE}"
@@ -318,7 +320,7 @@
         </javadoc>
     </target> 
  
-    <target name="dist" depends="compile,jars,javadoc"
+    <target name="dist" depends="compile.all ,jars, javadoc"
     >
        <!-- First, let's copy the binary jars to dist -->
        <copy todir="${dir.dist}">
@@ -393,7 +395,7 @@
     <!-- Compiling and running test cases
       -->
 
-    <target name="compile.test" depends="compile.core, compile.mapper">
+    <target name="compile.test" depends="compile.main">
         <javac srcdir="${src.dir.test}" destdir="${dir.test.classes}"
             source="1.5" target="1.5"
             debug="true"
diff --git a/lib/perf/json_simple-1.0.2.jar b/lib/perf/json_simple-1.0.2.jar
new file mode 100644
index 0000000..73b66bd
--- /dev/null
+++ b/lib/perf/json_simple-1.0.2.jar
Binary files differ
diff --git a/release-notes/VERSION b/release-notes/VERSION
index 0829e28..cf8d656 100644
--- a/release-notes/VERSION
+++ b/release-notes/VERSION
@@ -1,7 +1,7 @@
 Version: 0.9.6
 
 Release date: 
-  05-Jan-2008
+  13-Jan-2008
 
 Description:
   Another pre-1.0 release: this time just one big new feature: ability
diff --git a/run-json-perf.sh b/run-json-perf.sh
index 6fde614..fd71819 100755
--- a/run-json-perf.sh
+++ b/run-json-perf.sh
@@ -1,11 +1,5 @@
 #!/bin/sh
 
-java -Xmx48m -server\
- -cp build/classes\
-:lib/perf/json-org.jar\
-:lib/perf/stringtree-json-2.0.5.jar\
-:lib/perf/antlr-2.7.6.jar\
-:lib/perf/jsontools-core-1.5.jar\
-:lib/perf/noggit.jar\
+java -Xmx48m -server -cp build/perf-classes:build/classes:lib/perf/\* \
  TestJsonPerf \
  $*
diff --git a/src/perf/TestJsonPerf.java b/src/perf/TestJsonPerf.java
index 22e2e2f..e37b561 100644
--- a/src/perf/TestJsonPerf.java
+++ b/src/perf/TestJsonPerf.java
@@ -2,8 +2,8 @@
 
 import org.codehaus.jackson.*;
 import org.codehaus.jackson.io.IOContext;
-import org.codehaus.jackson.map.JavaTypeMapper;
-import org.codehaus.jackson.map.JsonTypeMapper;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.TreeMapper;
 import org.codehaus.jackson.util.BufferRecycler;
 
 // json.org's reference implementation
@@ -17,9 +17,9 @@
 
 public final class TestJsonPerf
 {
-    private final static int REPS = 2500;
+    private final int REPS;
 
-    private final static int TEST_PER_GC = 5;
+    private final static int TEST_PER_GC = 15;
 
     final JsonFactory mJsonFactory;
 
@@ -33,7 +33,10 @@
         mJsonFactory = new JsonFactory();
         mData = readData(f);
 
-        System.out.println("Read "+mData.length+" bytes from '"+f+"'");
+        // Let's try to guestimate suitable size... to get to 100 megs parsed
+        REPS = (int) ((double) (100 * 1000 * 1000) / (double) mData.length);
+
+        System.out.println("Read "+mData.length+" bytes from '"+f+"'; will do "+REPS+" reps");
         System.out.println();
     }
 
@@ -45,12 +48,12 @@
 
         while (true) {
             try {  Thread.sleep(100L); } catch (InterruptedException ie) { }
-            // Use 7 to test all...
-            int round = (i++ % 3);
+            // Use 9 to test all...
+            int round = (i++ % 7);
 
             long curr = System.currentTimeMillis();
             String msg;
-            boolean lf = false;
+            boolean lf = (round == 0);
 
             switch (round) {
             case 0:
@@ -62,29 +65,32 @@
                 sum += testJacksonStream(REPS, false);
                 break;
             case 2:
-                lf = true;
                 msg = "Noggit";
                 sum += testNoggit(REPS);
                 break;
-                /*
-            case 2:
+
+            case 3:
                 msg = "Jackson, Java types";
                 sum += testJacksonJavaTypes(REPS);
                 break;
-                */
-            case 3:
+
+            case 4:
                 msg = "Jackson, JSON types";
                 sum += testJacksonJavaTypes(REPS);
                 break;
-            case 4:
+            case 5:
                 msg = "Json.org";
                 sum += testJsonOrg(REPS);
                 break;
-            case 5:
+            case 6:
+                msg = "Json-simple";
+                sum += testJsonSimple(REPS);
+                break;
+            case 7:
                 msg = "JSONTools (berlios.de)";
                 sum += testJsonTools(REPS);
                 break;
-            case 6:
+            case 8:
                 msg = "StringTree";
                 sum += testStringTree(REPS);
                 break;
@@ -130,9 +136,9 @@
         throws Exception
     {
         Object ob = null;
+        // Json.org's code only accepts Strings:
+        String input = new String(mData, "UTF-8");
         for (int i = 0; i < reps; ++i) {
-            // Json.org's code only accepts Strings:
-            String input = new String(mData, "UTF-8");
             JSONTokener tok = new JSONTokener(input);
             ob = tok.nextValue();
         }
@@ -159,14 +165,26 @@
         throws Exception
     {
         Object ob = null;
+        String input = new String(mData, "UTF-8");
         for (int i = 0; i < reps; ++i) {
             // StringTree impl only accepts Strings:
-            String input = new String(mData, "UTF-8");
             ob = new JSONReader().read(input);
         }
         return ob.hashCode();
     }
 
+    protected int testJsonSimple(int reps)
+        throws Exception
+    {
+        // Json.org's code only accepts Strings:
+        String input = new String(mData, "UTF-8");
+        Object ob = null;
+        for (int i = 0; i < reps; ++i) {
+            ob = org.json.simple.JSONValue.parse(input);
+        }
+        return ob.hashCode();
+    }
+
     protected int testNoggit(int reps)
         throws Exception
     {
@@ -184,6 +202,10 @@
             //char[] cbuf = new char[mData.length];
             //InputStreamReader r = new InputStreamReader(bin, "UTF-8");
             byte[] bbuf = ctxt.allocReadIOBuffer();
+            /* 13-Jan-2009, tatu: Note: Noggit doesn't use our turbo-charged
+             *   UTF8 codec by default. But let's make it as fast as we
+             *   possibly can...
+             */
             UTF8Reader r = new UTF8Reader(ctxt, bin, bbuf, 0, 0);
 
             bin.reset();
@@ -223,10 +245,11 @@
         throws Exception
     {
         Object ob = null;
-        JavaTypeMapper mapper = new JavaTypeMapper();
+        ObjectMapper mapper = new ObjectMapper();
         for (int i = 0; i < reps; ++i) {
             JsonParser jp = mJsonFactory.createJsonParser(new ByteArrayInputStream(mData));
-            ob = mapper.read(jp);
+            // This is "untyped"... Maps, Lists etc
+            ob = mapper.readValue(jp, Object.class);
             jp.close();
         }
         return ob.hashCode(); // just to get some non-optimizable number
@@ -236,10 +259,10 @@
         throws Exception
     {
         Object ob = null;
-        JsonTypeMapper mapper = new JsonTypeMapper();
+        TreeMapper mapper = new TreeMapper();
         for (int i = 0; i < reps; ++i) {
             JsonParser jp = mJsonFactory.createJsonParser(new ByteArrayInputStream(mData));
-            ob = mapper.read(jp);
+            ob = mapper.readTree(jp);
             jp.close();
         }
         return ob.hashCode(); // just to get some non-optimizable number