Index: /branches/eam_branches/ipp-20211108/ippTests/ippCheck/src/ippCheckKeys.c
===================================================================
--- /branches/eam_branches/ipp-20211108/ippTests/ippCheck/src/ippCheckKeys.c	(revision 42004)
+++ /branches/eam_branches/ipp-20211108/ippTests/ippCheck/src/ippCheckKeys.c	(revision 42005)
@@ -2,5 +2,6 @@
 # include <pslib.h>
 
-bool PrintMismatchedKeys (psMetadata *list, psMetadata *v1, psMetadata *v2);
+bool PrintMismatchedKeys (psMetadata *list, psMetadata *v1, psMetadata *v2, char *prefix);
+bool PrintMissingKeys (psMetadata *list, char *prefix);
 
 int main(int argc, char **argv) {
@@ -75,22 +76,22 @@
 # define SAVE_ITEM_TWO							\
 	if (fabs(ratio) > 1.0)    {					\
-	  psMetadataItem *newItem = psMetadataItemCopy(item_2);		\
-	  psMetadataAddItem (off100, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
-	  continue;							\
+	    psMetadataItem *newItem = psMetadataItemCopy(item_2);	\
+	    psMetadataAddItem (off100, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
+	    continue;							\
 	}								\
 	if (fabs(ratio) > 0.1)    {					\
-	  psMetadataItem *newItem = psMetadataItemCopy(item_2);		\
-	  psMetadataAddItem (off010, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
-	  continue;							\
+	    psMetadataItem *newItem = psMetadataItemCopy(item_2);	\
+	    psMetadataAddItem (off010, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
+	    continue;							\
 	}								\
 	if (fabs(ratio) > 0.01)    {					\
-	  psMetadataItem *newItem = psMetadataItemCopy(item_2);		\
-	  psMetadataAddItem (off001, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
-	  continue;							\
+	    psMetadataItem *newItem = psMetadataItemCopy(item_2);	\
+	    psMetadataAddItem (off001, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
+	    continue;							\
 	}								\
 	if (fabs(ratio) <= 0.01)    {					\
-	  psMetadataItem *newItem = psMetadataItemCopy(item_2);		\
-	  psMetadataAddItem (offlow, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
-	  continue;							\
+	    psMetadataItem *newItem = psMetadataItemCopy(item_2);	\
+	    psMetadataAddItem (offlow, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
+	    continue;							\
 	}
 
@@ -153,27 +154,43 @@
     }
 
-    fprintf (stdout, "\n --- Keys missing from file 2 ---\n");
-    psMetadataPrint (0, missing, 1);
-
-    fprintf (stdout, "\n --- Keys with inconsistent types ---\n");
-    psMetadataPrint (0, badtype, 1);
-
-    fprintf (stdout, "\n --- Keys with mismatched strings ---\n");
-    PrintMismatchedKeys (offstr, head_1, head_2);
-
-    fprintf (stdout, "\n --- Keys with mismatched boolean values ---\n");
-    PrintMismatchedKeys (badbool, head_1, head_2);
-
-    fprintf (stdout, "\n --- Keys inconsistent by 100%% or more ---\n");
-    PrintMismatchedKeys (off100, head_1, head_2);
-
-    fprintf (stdout, "\n --- Keys inconsistent by 10 - 100%% or more ---\n");
-    PrintMismatchedKeys (off010, head_1, head_2);
-
-    fprintf (stdout, "\n --- Keys inconsistent by 1 - 10%% or more ---\n");
-    PrintMismatchedKeys (off001, head_1, head_2);
-
-    fprintf (stdout, "\n --- Keys inconsistent by < 1%% ---\n");
-    PrintMismatchedKeys (offlow, head_1, head_2);
+    if (psListLength(missing->list)) {
+	fprintf (stdout, "\n# --- Keys missing from file 2 ---\n");
+	PrintMissingKeys (missing, "MISS");
+    }
+
+    if (psListLength(badtype->list)) {
+	fprintf (stdout, "\n# --- Keys with inconsistent types ---\n");
+	PrintMissingKeys (badtype, "TYPE");
+    }
+
+    if (psListLength(offstr->list)) {
+	fprintf (stdout, "\n# --- Keys with mismatched strings ---\n");
+	PrintMismatchedKeys (offstr, head_1, head_2, "STR ");
+    }
+
+    if (psListLength(badbool->list)) {
+	fprintf (stdout, "\n# --- Keys with mismatched boolean values ---\n");
+	PrintMismatchedKeys (badbool, head_1, head_2, "BOOL");
+    }
+
+    if (psListLength(off100->list)) {
+	fprintf (stdout, "\n# --- Keys inconsistent by 100%% or more ---\n");
+	PrintMismatchedKeys (off100, head_1, head_2, "D100");
+    }
+
+    if (psListLength(off010->list)) {
+	fprintf (stdout, "\n# --- Keys inconsistent by 10 - 100%% or more ---\n");
+	PrintMismatchedKeys (off010, head_1, head_2, "D010");
+    }
+
+    if (psListLength(off001->list)) {
+	fprintf (stdout, "\n# --- Keys inconsistent by 1 - 10%% or more ---\n");
+	PrintMismatchedKeys (off001, head_1, head_2, "D001");
+    }
+    
+    if (psListLength(offlow->list)) {
+	fprintf (stdout, "\n# --- Keys inconsistent by < 1%% ---\n");
+	PrintMismatchedKeys (offlow, head_1, head_2, "D000");
+    }
 
     exit (0);
@@ -181,5 +198,5 @@
 
 // we only need to support 4 types: BOOL, STRING, S32, S64, F32, F64:
-bool PrintMismatchedKeys (psMetadata *list, psMetadata *v1, psMetadata *v2) {
+bool PrintMismatchedKeys (psMetadata *list, psMetadata *v1, psMetadata *v2, char *prefix) {
 
     // compare keywords
@@ -200,7 +217,7 @@
 	  case PS_DATA_BOOL:
 	    if (longName) {
-		fprintf (stdout, " %32s : %12c vs %12c\n", item->name, (i1->data.B ? 'T' : 'F'), (i2->data.B ? 'T' : 'F'));
+		fprintf (stdout, "%4s %32s : %12c vs %12c\n", prefix, item->name, (i1->data.B ? 'T' : 'F'), (i2->data.B ? 'T' : 'F'));
 	    } else {
-		fprintf (stdout, " %8s : %12c vs %12c\n", item->name, (i1->data.B ? 'T' : 'F'), (i2->data.B ? 'T' : 'F'));
+		fprintf (stdout, "%4s %8s : %12c vs %12c\n", prefix, item->name, (i1->data.B ? 'T' : 'F'), (i2->data.B ? 'T' : 'F'));
 	    }
 	    break;
@@ -209,7 +226,7 @@
 	      float ratio = delta / (float) i1->data.S32;
 	      if (longName) {
-		  fprintf (stdout, " %32s : %12d vs %12d : %12.5g\n", item->name, i1->data.S32, i2->data.S32, ratio);
-	      } else {
-		  fprintf (stdout, " %8s : %12d vs %12d : %12.5g\n", item->name, i1->data.S32, i2->data.S32, ratio);
+		  fprintf (stdout, "%4s %32s : %12d vs %12d : %12.5g\n", prefix, item->name, i1->data.S32, i2->data.S32, ratio);
+	      } else {
+		  fprintf (stdout, "%4s %8s : %12d vs %12d : %12.5g\n", prefix, item->name, i1->data.S32, i2->data.S32, ratio);
 	      }
 	      break; }
@@ -218,7 +235,7 @@
 	      float ratio = delta / (float) i1->data.S64;
 	      if (longName) {
-		  fprintf (stdout, " %32s : %12ld vs %12ld : %12.5g\n", item->name, i1->data.S64, i2->data.S64, ratio);
-	      } else {
-		  fprintf (stdout, " %8s : %12ld vs %12ld : %12.5g\n", item->name, i1->data.S64, i2->data.S64, ratio);
+		  fprintf (stdout, "%4s %32s : %12ld vs %12ld : %12.5g\n", prefix, item->name, i1->data.S64, i2->data.S64, ratio);
+	      } else {
+		  fprintf (stdout, "%4s %8s : %12ld vs %12ld : %12.5g\n", prefix, item->name, i1->data.S64, i2->data.S64, ratio);
 	      }
 	      break; }
@@ -227,7 +244,7 @@
 	      double ratio = delta / (double) i1->data.F32;
 	      if (longName) {
-		  fprintf (stdout, " %32s : %12.5g vs %12.5g : %12.5g\n", item->name, i1->data.F32, i2->data.F32, ratio);
-	      } else {
-		  fprintf (stdout, " %8s : %12.5g vs %12.5g : %12.5g\n", item->name, i1->data.F32, i2->data.F32, ratio);
+		  fprintf (stdout, "%4s %32s : %12.5g vs %12.5g : %12.5g\n", prefix, item->name, i1->data.F32, i2->data.F32, ratio);
+	      } else {
+		  fprintf (stdout, "%4s %8s : %12.5g vs %12.5g : %12.5g\n", prefix, item->name, i1->data.F32, i2->data.F32, ratio);
 	      }
 	      break; }
@@ -236,14 +253,75 @@
 	      psF64 ratio = delta / (psF64) i1->data.F64;
 	      if (longName) {
-		  fprintf (stdout, " %32s : %12.5g vs %12.5g : %12.5g\n", item->name, i1->data.F64, i2->data.F64, ratio);
-	      } else {
-		  fprintf (stdout, " %8s : %12.5g vs %12.5g : %12.5g\n", item->name, i1->data.F64, i2->data.F64, ratio);
+		  fprintf (stdout, "%4s %32s : %12.5g vs %12.5g : %12.5g\n", prefix, item->name, i1->data.F64, i2->data.F64, ratio);
+	      } else {
+		  fprintf (stdout, "%4s %8s : %12.5g vs %12.5g : %12.5g\n", prefix, item->name, i1->data.F64, i2->data.F64, ratio);
 	      }
 	      break; }
 	  case PS_DATA_STRING:
 	    if (longName) {
-		fprintf (stdout, " %32s : %60s vs %60s\n", item->name, i1->data.str, i2->data.str); 
+		fprintf (stdout, "%4s %32s : %60s vs %60s\n", prefix, item->name, i1->data.str, i2->data.str); 
 	    } else {
-		fprintf (stdout, " %8s : %60s vs %60s\n", item->name, i1->data.str, i2->data.str); 
+		fprintf (stdout, "%4s %8s : %60s vs %60s\n", prefix, item->name, i1->data.str, i2->data.str); 
+	    }
+	    break;
+	  default:
+	    psAbort ("impossible!");
+	}
+    }  
+    return true;
+}
+
+// we only need to support 4 types: BOOL, STRING, S32, S64, F32, F64:
+bool PrintMissingKeys (psMetadata *list, char *prefix) {
+
+    // compare keywords
+    psMetadataIterator *iter = psMetadataIteratorAlloc (list, PS_LIST_HEAD, NULL);
+    psMetadataItem *item = NULL;
+    while ((item = psMetadataGetAndIncrement (iter)) != NULL) {
+
+	int longName = (strlen(item->name) > 8);
+	longName = true;
+	
+	switch (item->type) {
+	  case PS_DATA_BOOL:
+	    if (longName) {
+		fprintf (stdout, "%4s %32s : %12c\n", prefix, item->name, (item->data.B ? 'T' : 'F'));
+	    } else {
+		fprintf (stdout, "%4s %8s : %12c\n", prefix, item->name, (item->data.B ? 'T' : 'F'));
+	    }
+	    break;
+	  case PS_DATA_S32: {
+	      if (longName) {
+		  fprintf (stdout, "%4s %32s : %12d\n", prefix, item->name, item->data.S32);
+	      } else {
+		  fprintf (stdout, "%4s %8s : %12d\n", prefix, item->name, item->data.S32);
+	      }
+	      break; }
+	  case PS_DATA_S64: {
+	      if (longName) {
+		  fprintf (stdout, "%4s %32s : %12ld\n", prefix, item->name, item->data.S64);
+	      } else {
+		  fprintf (stdout, "%4s %8s : %12ld\n", prefix, item->name, item->data.S64);
+	      }
+	      break; }
+	  case PS_DATA_F32: {
+	      if (longName) {
+		  fprintf (stdout, "%4s %32s : %12.5g\n", prefix, item->name, item->data.F32);
+	      } else {
+		  fprintf (stdout, "%4s %8s : %12.5g\n", prefix, item->name, item->data.F32);
+	      }
+	      break; }
+	  case PS_DATA_F64: {
+	      if (longName) {
+		  fprintf (stdout, "%4s %32s : %12.5g\n", prefix, item->name, item->data.F64);
+	      } else {
+		  fprintf (stdout, "%4s %8s : %12.5g\n", prefix, item->name, item->data.F64);
+	      }
+	      break; }
+	  case PS_DATA_STRING:
+	    if (longName) {
+		fprintf (stdout, "%4s %32s : %60s\n", prefix, item->name, item->data.str); 
+	    } else {
+		fprintf (stdout, "%4s %8s : %60s\n", prefix, item->name, item->data.str); 
 	    }
 	    break;
