/var/lib/pcp/testsuite/src/units-parse.c is in pcp-testsuite 3.10.8build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111  | // Copyright (C) 2014 Red Hat, Inc.
// Exercise pmParseUnitsStr()
#include <pcp/pmapi.h>
#include <assert.h>
// #define assert(c) if(!(c)) printf("%s\n", #c)
void
pmunits_roundtrip(int print_p, int d1, int d2, int d3, int s1, int s2, int s3)
{
    pmUnits victim = {.dimSpace = d1,
	.dimCount = d2,
	.dimTime = d3,
	.scaleSpace = s1,
	.scaleCount = s2,
	.scaleTime = s3
    };
    char converted[100] = "";
    char converted2[100] = "";
    pmUnits reversed;
    double reversed_multiplier;
    int sts;
    char *errmsg = NULL;
    (void) pmUnitsStr_r(&victim, converted, sizeof(converted));
    sts = pmParseUnitsStr(converted, &reversed, &reversed_multiplier, &errmsg);
    (void) pmUnitsStr_r(&reversed, converted2, sizeof(converted2));
    if (print_p)
	printf("(%d,%d,%d,%d,%d,%d) => \"%s\" => conv rc %d%s%s => (%d,%d,%d,%d,%d,%d)*%g => \"%s\" \n",
	       victim.dimSpace, victim.dimCount, victim.dimTime, victim.scaleSpace, victim.scaleCount, victim.scaleTime,
	       converted, sts, (sts < 0 ? " " : ""), (sts < 0 ? errmsg : ""), reversed.dimSpace, reversed.dimCount,
	       reversed.dimTime, reversed.scaleSpace, reversed.scaleCount, reversed.scaleTime, reversed_multiplier,
	       converted2);
    else {
	assert(sts == 0);
	assert(strcmp(converted, converted2) == 0);
	assert(reversed_multiplier == 1.0);	// FP equality ok
	assert(reversed.dimSpace == victim.dimSpace);
	assert(reversed.dimTime == victim.dimTime);
	assert(reversed.scaleSpace == victim.scaleSpace);
	assert(reversed.scaleTime == victim.scaleTime);
	// The case of 'count' is more relaxed because of the ambiguity:
	// "count x 10^6" => (dim=6 scale=1) or (scale=1 dim=6)
	assert(reversed.dimCount * reversed.scaleCount == victim.dimCount * victim.scaleCount);
    }
    if (sts < 0)
	free(errmsg);
}
void
pmunits_roundtrip_all()
{
    int d1, d2, d3, s1, s2, s3;
    unsigned k = 0;
    for (d1 = -8; d1 < 8; d1++)
	for (d2 = -8; d2 < 8; d2++)
	    for (d3 = -8; d3 < 8; d3++)
		for (s1 = 0; s1 < (d1 ? 16 : 0); s1++)	// scale X only if dim X
		    for (s2 = -8; s2 < (d2 ? 8 : -8); s2++)
			for (s3 = 0; s3 < (d3 ? 16 : 0); s3++) {
			    k++;
			    pmunits_roundtrip(0, d1, d2, d3, s1, s2, s3);
			}
    printf("%u pmUnits tuples round-tripped.\n", k);
}
void
pmunits_parse(const char *str)
{
    pmUnits reversed;
    double reversed_multiplier;
    int sts;
    char converted[100] = "";
    char *errmsg;
    sts = pmParseUnitsStr(str, &reversed, &reversed_multiplier, &errmsg);
    (void) pmUnitsStr_r(&reversed, converted, sizeof(converted));
    printf("\"%s\" => conv rc %d%s%s => (%d,%d,%d,%d,%d,%d)*%g => \"%s\"\n", str, sts, (sts < 0 ? " " : ""),
	   (sts < 0 ? errmsg : ""), reversed.dimSpace, reversed.dimCount, reversed.dimTime, reversed.scaleSpace,
	   reversed.scaleCount, reversed.scaleTime, reversed_multiplier, converted);
    if (sts < 0)
	free(errmsg);
}
int
main(int argc, char *argv[])
{
    if (argc == 8 && !strcmp(argv[1], "tuple"))
	pmunits_roundtrip(1, atoi(argv[2]), atoi(argv[3]), atoi(argv[4]), atoi(argv[5]), atoi(argv[6]), atoi(argv[7]));
    else if (argc == 2 && !strcmp(argv[1], "scan"))
	pmunits_roundtrip_all();
    else if (argc == 3 && !strcmp(argv[1], "parse"))
	pmunits_parse(argv[2]);
    else
	return -1;
    return 0;
}
 |