IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 41990


Ignore:
Timestamp:
Jan 19, 2022, 6:37:58 AM (4 years ago)
Author:
eugene
Message:

add hdr comparison functions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20211108/ippTests/ippCheck/src/ippCheckKeys.c

    r41986 r41990  
    11// # include <ippCheckKeys.h>
    22# include <pslib.h>
     3
     4bool PrintMismatchedKeys (psMetadata *list, psMetadata *v1, psMetadata *v2);
    35
    46int main(int argc, char **argv) {
     
    4042    psMetadata *offstr  = psMetadataAlloc ();
    4143    psMetadata *off100  = psMetadataAlloc ();
    42     psMetadata *off10   = psMetadataAlloc ();
    43     psMetadata *off1    = psMetadataAlloc ();
     44    psMetadata *off010   = psMetadataAlloc ();
     45    psMetadata *off001    = psMetadataAlloc ();
    4446    psMetadata *offlow  = psMetadataAlloc ();
    4547
     
    7173        }
    7274
     75# define SAVE_ITEM_TWO                                                  \
     76        if (fabs(ratio) > 1.0)    {                                     \
     77          psMetadataItem *newItem = psMetadataItemCopy(item_2);         \
     78          psMetadataAddItem (off100, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
     79          continue;                                                     \
     80        }                                                               \
     81        if (fabs(ratio) > 0.1)    {                                     \
     82          psMetadataItem *newItem = psMetadataItemCopy(item_2);         \
     83          psMetadataAddItem (off010, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
     84          continue;                                                     \
     85        }                                                               \
     86        if (fabs(ratio) > 0.01)    {                                    \
     87          psMetadataItem *newItem = psMetadataItemCopy(item_2);         \
     88          psMetadataAddItem (off001, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
     89          continue;                                                     \
     90        }                                                               \
     91        if (fabs(ratio) <= 0.01)    {                                   \
     92          psMetadataItem *newItem = psMetadataItemCopy(item_2);         \
     93          psMetadataAddItem (offlow, newItem, PS_LIST_TAIL, PS_META_REPLACE); \
     94          continue;                                                     \
     95        }
     96
    7397        switch (item_1->type) {
    7498          case PS_DATA_BOOL:
     
    84108                // fprintf (stdout, "key %s value mismatch: %d vs %d\n", item_1->name, item_1->data.S32, item_2->data.S32);
    85109                int delta = (item_1->data.S32 - item_2->data.S32);
    86                 float fdelta = delta / (float) item_1->data.S32;
    87                 if (fabs(fdelta) > 1.0)    {
    88                     psMetadataItem *newItem = psMetadataItemCopy(item_2); // Copied item
    89                     psMetadataAddItem (off100, newItem, PS_LIST_TAIL, PS_META_REPLACE);
    90                     continue;
    91                 }
    92                 if (fabs(fdelta) > 0.1)    {
    93                     psMetadataItem *newItem = psMetadataItemCopy(item_2); // Copied item
    94                     psMetadataAddItem (off10, newItem, PS_LIST_TAIL, PS_META_REPLACE);
    95                     continue;
    96                 }
    97                 if (fabs(fdelta) > 0.01)    {
    98                     psMetadataItem *newItem = psMetadataItemCopy(item_2); // Copied item
    99                     psMetadataAddItem (off1, newItem, PS_LIST_TAIL, PS_META_REPLACE);
    100                     continue;
    101                 }
    102                 if (fabs(fdelta) <= 0.01)    {
    103                     psMetadataItem *newItem = psMetadataItemCopy(item_2); // Copied item
    104                     psMetadataAddItem (offlow, newItem, PS_LIST_TAIL, PS_META_REPLACE);
    105                     continue;
    106                 }
    107             }
    108             break;
    109 
     110                float ratio = delta / (float) item_1->data.S32;
     111                SAVE_ITEM_TWO;
     112            }
     113            break;
     114
     115          case PS_DATA_S64:
     116            if (item_1->data.S64 != item_2->data.S64) {
     117                long int delta = (item_1->data.S64 - item_2->data.S64);
     118                float ratio = delta / (float) item_1->data.S64;
     119                SAVE_ITEM_TWO;
     120            }
     121            break;
     122               
    110123          case PS_DATA_F64:
    111124            if (item_1->data.F64 != item_2->data.F64) {
    112125                double delta = (item_1->data.F64 - item_2->data.F64);
    113                 double fdelta = delta / (float) item_1->data.F64;
    114                 if (fabs(fdelta) > 1.0)    {
    115                     psMetadataItem *newItem = psMetadataItemCopy(item_2); // Copied item
    116                     psMetadataAddItem (off100, newItem, PS_LIST_TAIL, PS_META_REPLACE);
    117                     continue;
    118                 }
    119                 if (fabs(fdelta) > 0.1)    {
    120                     psMetadataItem *newItem = psMetadataItemCopy(item_2); // Copied item
    121                     psMetadataAddItem (off10, newItem, PS_LIST_TAIL, PS_META_REPLACE);
    122                     continue;
    123                 }
    124                 if (fabs(fdelta) > 0.01)    {
    125                     psMetadataItem *newItem = psMetadataItemCopy(item_2); // Copied item
    126                     psMetadataAddItem (off1, newItem, PS_LIST_TAIL, PS_META_REPLACE);
    127                     continue;
    128                 }
    129                 if (fabs(fdelta) <= 0.01)    {
    130                     psMetadataItem *newItem = psMetadataItemCopy(item_2); // Copied item
    131                     psMetadataAddItem (offlow, newItem, PS_LIST_TAIL, PS_META_REPLACE);
    132                     continue;
    133                 }
     126                double ratio = delta / (float) item_1->data.F64;
     127                SAVE_ITEM_TWO;
    134128            }
    135129            break;
     
    151145    }
    152146
    153     fprintf (stdout, "Keys missing from file 2:\n");
     147    fprintf (stdout, "\n --- Keys missing from file 2 ---\n");
    154148    psMetadataPrint (0, missing, 1);
    155149
    156     fprintf (stdout, "Keys with inconsistent types:\n");
     150    fprintf (stdout, "\n --- Keys with inconsistent types ---\n");
    157151    psMetadataPrint (0, badtype, 1);
    158152
    159     fprintf (stdout, "Keys with mismatched strings:\n");
    160     psMetadataPrint (0, offstr, 1);
    161 
    162     fprintf (stdout, "Keys with mismatched boolean values:\n");
    163     psMetadataPrint (0, badbool, 1);
    164 
    165     fprintf (stdout, "Keys with inconsistent by 100%% or more:\n");
    166     psMetadataPrint (0, off100, 1);
    167 
    168     fprintf (stdout, "Keys with inconsistent by 10 - 100%% or more:\n");
    169     psMetadataPrint (0, off10, 1);
    170 
    171     fprintf (stdout, "Keys with inconsistent by 1 - 10%% or more:\n");
    172     psMetadataPrint (0, off1, 1);
    173 
    174     fprintf (stdout, "Keys with inconsistent by < 1%%:\n");
    175     psMetadataPrint (0, offlow, 1);
     153    fprintf (stdout, "\n --- Keys with mismatched strings ---\n");
     154    PrintMismatchedKeys (offstr, head_1, head_2);
     155
     156    fprintf (stdout, "\n --- Keys with mismatched boolean values ---\n");
     157    PrintMismatchedKeys (badbool, head_1, head_2);
     158
     159    fprintf (stdout, "\n --- Keys inconsistent by 100%% or more ---\n");
     160    PrintMismatchedKeys (off100, head_1, head_2);
     161
     162    fprintf (stdout, "\n --- Keys inconsistent by 10 - 100%% or more ---\n");
     163    PrintMismatchedKeys (off010, head_1, head_2);
     164
     165    fprintf (stdout, "\n --- Keys inconsistent by 1 - 10%% or more ---\n");
     166    PrintMismatchedKeys (off001, head_1, head_2);
     167
     168    fprintf (stdout, "\n --- Keys inconsistent by < 1%% ---\n");
     169    PrintMismatchedKeys (offlow, head_1, head_2);
    176170
    177171    exit (0);
     172}
     173
     174// we only need to support 4 types: BOOL, STRING, S32, S64, F64:
     175bool PrintMismatchedKeys (psMetadata *list, psMetadata *v1, psMetadata *v2) {
     176
     177    // compare keywords
     178    psMetadataIterator *iter = psMetadataIteratorAlloc (list, PS_LIST_HEAD, NULL);
     179    psMetadataItem *item = NULL;
     180    while ((item = psMetadataGetAndIncrement (iter)) != NULL) {
     181
     182        psMetadataItem *i1 = psMetadataLookup(v1, item->name);
     183        psAssert (i1, "is this possible?");
     184
     185        psMetadataItem *i2 = psMetadataLookup(v2, item->name);
     186        psAssert (i2, "is this possible?");
     187
     188        int longName = (strlen(item->name) > 8);
     189
     190        switch (i1->type) {
     191          case PS_DATA_BOOL:
     192            if (longName) {
     193              fprintf (stdout, " %32s : %12c vs %12c\n", item->name, (i1->data.B ? 'T' : 'F'), (i2->data.B ? 'T' : 'F'));
     194            } else {
     195              fprintf (stdout, " %8s : %12c vs %12c\n", item->name, (i1->data.B ? 'T' : 'F'), (i2->data.B ? 'T' : 'F'));
     196            }
     197            break;
     198          case PS_DATA_S32: {
     199            int delta = i1->data.S32 - i2->data.S32;
     200            float ratio = delta / (float) i1->data.S32;
     201            if (longName) {
     202              fprintf (stdout, " %32s : %12d vs %12d : %12.5g\n", item->name, i1->data.S32, i2->data.S32, ratio);
     203            } else {
     204              fprintf (stdout, " %8s : %12d vs %12d : %12.5g\n", item->name, i1->data.S32, i2->data.S32, ratio);
     205            }
     206            break; }
     207          case PS_DATA_S64: {
     208            int delta = i1->data.S64 - i2->data.S64;
     209            float ratio = delta / (float) i1->data.S64;
     210            if (longName) {
     211              fprintf (stdout, " %32s : %12ld vs %12ld : %12.5g\n", item->name, i1->data.S64, i2->data.S64, ratio);
     212            } else {
     213              fprintf (stdout, " %8s : %12ld vs %12ld : %12.5g\n", item->name, i1->data.S64, i2->data.S64, ratio);
     214            }
     215            break; }
     216          case PS_DATA_F64: {
     217            double delta = i1->data.F64 - i2->data.F64;
     218            double ratio = delta / (double) i1->data.F64;
     219            if (longName) {
     220              fprintf (stdout, " %32s : %12.5g vs %12.5g : %12.5g\n", item->name, i1->data.F64, i2->data.F64, ratio);
     221            } else {
     222              fprintf (stdout, " %8s : %12.5g vs %12.5g : %12.5g\n", item->name, i1->data.F64, i2->data.F64, ratio);
     223            }
     224            break; }
     225          case PS_DATA_STRING:
     226            if (longName) {
     227              fprintf (stdout, " %32s : %60s vs %60s\n", item->name, i1->data.str, i2->data.str);
     228            } else {
     229              fprintf (stdout, " %8s : %60s vs %60s\n", item->name, i1->data.str, i2->data.str);
     230            }
     231            break;
     232          default:
     233            psAbort ("impossible!");
     234        }
     235    } 
     236    return true;
    178237}
    179238
Note: See TracChangeset for help on using the changeset viewer.