Index: /trunk/archive/psdb/test.c
===================================================================
--- /trunk/archive/psdb/test.c	(revision 3250)
+++ /trunk/archive/psdb/test.c	(revision 3251)
@@ -6,14 +6,31 @@
 #include "psleak.h"
 
+#define TEST_SETUP\
+    int testsRun    = 0;\
+    int testsPassed = 0;
+
+#define TEST_SUMMARY\
+    printf("\n\n### TEST SUMMARY ###\n\n    %d of %d tests succeeded\n\n", \
+        testsPassed, testsRun);
+
 #define OK(test, name) \
-    printf("%s... ", name); \
-    test ? printf("OK\n") : printf("FAILED\n");
+    testsRun++; \
+    printf("Test #%d: %s... ", testsRun, name); \
+    if (test) { \
+        testsPassed++; \
+        printf("OK\n"); \
+    } else { \
+        printf("FAILED\n"); \
+    }
 
 int main (int argv, char **argc)
 { 
+    TEST_SETUP;
+
     psMemAllocateCallbackSet(stacMemPrint);
     //psMemAllocateCallbackSetID(224);
     psMemFreeCallbackSet(stacMemPrint);
     psMemProblemCallbackSet(stacMemoryProblem);
+    atexit(stacCheckMemory);
 
     psDB            *dbh;
@@ -21,6 +38,15 @@
     // open db
     dbh = psDBInit("localhost", "test", NULL, "test");
-    OK(dbh, "psDBInit()");
-
+    OK(dbh, "psDBInit() - connect");
+
+    {
+        psDB        *foo;
+
+        foo = psDBInit("tsohlacol", "tset", NULL, "tset");
+        OK(!foo, "psDBInit(), bad DSN");
+    }
+
+    // the next 3 tests will fail as the MySQL test account has insufficent
+    // permissions
     OK(psDBCreate(dbh, "foobar"), "psDBCreate()");
     OK(psDBChange(dbh, "foobar"), "psDBChange()");
@@ -37,11 +63,40 @@
         psMetadataAdd(md, 3, "boing", PS_TYPE_PTR, PS_META_STR, NULL, "60");
 
-        OK(psDBCreateTable(dbh, "bar", md), "psDBCreateTable()");
-
-        psFree(md);
-
-        OK(psDBDropTable(dbh, "bar"), "psDBDropTable()");
-    }
-    
+        OK(psDBCreateTable(dbh, "bar", md), "psDBCreateTable() - create table");
+
+        psFree(md);
+    }
+
+    OK(psDBDropTable(dbh, "bar"), "psDBDropTable() - drop table");
+
+    {
+        psMetadata      *md;
+
+        md = psMetadataAlloc();
+        psMetadataAdd(md, 0, "foo", PS_TYPE_S32, PS_META_PRIMITIVE, "Primary Key"); 
+
+        psDBCreateTable(dbh, "bar", md);
+
+        OK(!psDBCreateTable(dbh, "bar", md), "psDBCreateTable() - table already exists");
+
+        psFree(md);
+
+        psDBDropTable(dbh, "bar");
+    }
+
+    OK(!psDBDropTable(dbh, "fubar"), "psDBDropTable() - non-existant table");
+
+    // setup yak table for later tests
+    {
+        psMetadata      *md;
+
+        md = psMetadataAlloc();
+        psMetadataAdd(md, 0, "hair", PS_TYPE_F32, PS_META_PRIMITIVE, NULL);
+
+        psDBCreateTable(dbh, "yak", md);
+
+        psFree(md);
+    }
+
     // setup horse table for later tests
     {
@@ -49,16 +104,4 @@
 
         md = psMetadataAlloc();
-        psMetadataAdd(md, 0, "hair", PS_TYPE_F32, PS_META_PRIMITIVE, NULL);
-
-        psDBCreateTable(dbh, "yak", md);
-
-        psFree(md);
-    }
-
-    // setup yak table for later tests
-    {
-        psMetadata      *md;
-
-        md = psMetadataAlloc();
         psMetadataAdd(md, 0, "color", PS_TYPE_PTR, PS_META_STR, NULL, "100");
 
@@ -68,70 +111,4 @@
     }
 
-    // psDBSelectColumn()
-    {
-        psArray         *column;
-        int             i;
-
-        column = psDBSelectColumn(dbh, "horse", "color", 42);
-        OK(column, "psDBSelectColumn()");
-
-        for (i = 0; i < column->n; i++) {
-            printf("horse color is: %s\n", (char *)column->data[i]);
-            printf("length is: %d\n", (int)strlen(column->data[i]));
-        }
-
-        psFree(column);
-    }
-
-    // psDBSelectColumnNum()
-    {
-        psVector        *column;
-        int             i;
-
-        column = psDBSelectColumnNum(dbh, "yak", "hair", PS_TYPE_F32, 42);
-        OK(column, "psDBSelectColumnNum()");
-
-        for (i = 0; i < column->n; i++) {
-            printf("yak count is: %f\n", column->data.F32[i]);
-            if (isnan(column->data.F32[i])){
-                printf("and it's a nan\n");
-            }
-        }
-
-        psFree(column);
-    }
-
-    // psDBSelectRows()
-    {
-        psMetadata      *md;
-        psMetadataItem  *item;
-        psArray         *resultSet;
-        psListIterator  *cursor;
-        int             i;
-
-        md = psMetadataAlloc();
-        psMetadataAdd(md, 0, "color", PS_TYPE_PTR, PS_META_STR, NULL, "red"); 
-
-        resultSet = psDBSelectRows(dbh, "horse", md, 0);
-        OK(resultSet, "psDBSelectRows()");
-
-        psFree(md);
-        printf("row count is: %d\n", resultSet->n);
-        for (i = 0; i < resultSet->n; i++) {
-            md = (psMetadata *)resultSet->data[0];
-
-            cursor = psListIteratorAlloc(md->list, 0);
-
-            while ((item = psListGetNext(cursor))) {
-                printf("colum name is: %s\n", item->name);
-                printf("data is: %s\n", (char *)item->data.V);
-            }
-
-            psFree(cursor);
-        }
-        psFree(resultSet);
-
-    }
-
     // psDBInsertOneRow()
     {
@@ -139,7 +116,18 @@
 
         md = psMetadataAlloc();
-        psMetadataAdd(md, 0, "color", PS_TYPE_PTR, PS_META_STR, NULL, "brown"); 
-
-        OK(psDBInsertOneRow(dbh, "horse", md),"psDBInsertOneRow()");
+        psMetadataAdd(md, 0, "hair", PS_TYPE_F32, PS_META_PRIMITIVE, NULL, 10e3);
+
+        OK(psDBInsertOneRow(dbh, "yak", md),"psDBInsertOneRow() - number");
+
+        psFree(md);
+    }
+
+    {
+        psMetadata      *md;
+
+        md = psMetadataAlloc();
+        psMetadataAdd(md, 0, "hair", PS_TYPE_F32, PS_META_PRIMITIVE, NULL, NAN);
+
+        OK(psDBInsertOneRow(dbh, "yak", md),"psDBInsertOneRow() - nan");
 
         psFree(md);
@@ -172,9 +160,76 @@
         // psFree(row);
 
-        OK(psDBInsertRows(dbh, "horse", rowSet), "psDBInsertRows()");
+        OK(psDBInsertRows(dbh, "horse", rowSet), "psDBInsertRows() - multi-row insert");
 
         psFree(rowSet);
     }
 
+    // psDBSelectColumn()
+    {
+        psArray         *column;
+        int             i;
+
+        column = psDBSelectColumn(dbh, "horse", "color", 42);
+        OK(column, "psDBSelectColumn() - select");
+        OK(column->n == 3, "psDBSelectColumn() - number of elements");
+
+        for (i = 0; i < column->n; i++) {
+            printf("\thorse color is: %s\n", (char *)column->data[i]);
+        }
+
+        psFree(column);
+    }
+
+    // psDBSelectColumnNum()
+    {
+        psVector        *column;
+        int             i;
+
+        column = psDBSelectColumnNum(dbh, "yak", "hair", PS_TYPE_F32, 42);
+        OK(column, "psDBSelectColumnNum() - select");
+        OK(column->n == 2, "psDBSelectColumnNum() - number of elements");
+
+        for (i = 0; i < column->n; i++) {
+            printf("\tyak hair count is: %f\n", column->data.F32[i]);
+            if (isnan(column->data.F32[i])){
+                printf("\t\tNO yak hair!!! (it's a nan)\n");
+            }
+        }
+
+        psFree(column);
+    }
+
+    // psDBSelectRows()
+    {
+        psMetadata      *md;
+        psMetadataItem  *item;
+        psArray         *resultSet;
+        psListIterator  *cursor;
+        int             i;
+
+        md = psMetadataAlloc();
+        psMetadataAdd(md, 0, "color", PS_TYPE_PTR, PS_META_STR, NULL, "brown"); 
+
+        resultSet = psDBSelectRows(dbh, "horse", md, 0);
+        OK(resultSet, "psDBSelectRows() - select");
+        OK(resultSet->n == 1, "psDBSelectRows() - number of rows");
+
+        psFree(md);
+        for (i = 0; i < resultSet->n; i++) {
+            md = (psMetadata *)resultSet->data[0];
+
+            cursor = psListIteratorAlloc(md->list, 0);
+
+            while ((item = psListGetNext(cursor))) {
+                printf("\tcolum name is: %s, value is: %s\n", item->name, (char *)item->data.V);
+            }
+
+            psFree(cursor);
+        }
+        psFree(resultSet);
+
+    }
+
+
     // psDBDumpRows()
     {
@@ -182,5 +237,6 @@
 
         resultSet = psDBDumpRows(dbh, "horse");
-        OK(resultSet, "psDBDumpRows()");
+        OK(resultSet, "psDBDumpRows() - dump");
+        OK(resultSet->n == 3, "psDBDumpRows() - number of rows");
         psFree(resultSet);
     }
@@ -193,10 +249,11 @@
 
         columns = psDBDumpCols(dbh, "horse");
-        OK(columns, "psDBDumpCols()");
+        OK(columns, "psDBDumpCols() - dump");
+        OK(columns->list->size == 1, "psDBDumpCols() - number of columns");
 
         cursor = psListIteratorAlloc(columns->list, 0);
 
         while ((item = psListGetNext(cursor))) {
-            printf("column name is: %s\n", item->name);
+            printf("\tcolumn name is: %s\n", item->name);
         }
 
@@ -210,4 +267,9 @@
         psMetadata      *value;
         psU64           rowsAffected;
+        psArray         *resultSet;
+        int             i;
+        psListIterator  *cursor;
+        psMetadata      *md;
+        psMetadataItem  *item;
 
         where = psMetadataAlloc();
@@ -221,5 +283,24 @@
         psFree(value);
 
-        OK(rowsAffected, "psDBUpdateRows()");
+        OK(rowsAffected, "psDBUpdateRows() - pink -> HOT pink");
+
+        resultSet = psDBSelectRows(dbh, "horse", value, 0);
+
+        for (i = 0; i < resultSet->n; i++) {
+            md = (psMetadata *)resultSet->data[0];
+
+            cursor = psListIteratorAlloc(md->list, 0);
+
+            while ((item = psListGetNext(cursor))) {
+                if (strcmp((char *)item->data.V, "HOT pink") == 0) {
+                    OK(1, "psDBUpdateRows() - psDBSelectRows() found HOT pink");
+                    printf("\thorse color is: %s\n", (char *)item->data.V);
+                }
+            }
+
+            psFree(cursor);
+        }
+
+        psFree(resultSet);
     }
 
@@ -228,5 +309,5 @@
     
     // cleanup other tests
-    // psDBDropTable(dbh, "horse");
+    psDBDropTable(dbh, "horse");
     psDBDropTable(dbh, "yak");
 
@@ -234,5 +315,7 @@
     psDBCleanup(dbh);
 
-    atexit(stacCheckMemory);
+    TEST_SUMMARY;
+
+    //psErrorStackPrint(stderr, "### Error stack dump ###\n");
 
     exit(0);
