qa: update 660 to generate index.html, fixing pcp-testsuite runs
[pcp.git] / qa / src / scale.c
blob7acf8619c15f362d9d01c53ec046883a9bafff21
1 /*
2 * Copyright (c) 1997-2001 Silicon Graphics, Inc. All Rights Reserved.
3 */
5 /*
6 * scale - exercise scale conversion, pmConvScale and pmUnitsStr
7 */
9 #include <pcp/pmapi.h>
10 #include <pcp/impl.h>
11 #include <pcp/pmda.h>
13 static pmUnits iu = PMDA_PMUNITS( 0, 1, 1, 0, PM_TIME_SEC, 0 );
14 static pmUnits ou = PMDA_PMUNITS( 0, 1, 1, 0, PM_TIME_SEC, 0 );
16 static int tval[] = { 1, 7200 };
17 static int tscale[] =
18 { PM_TIME_NSEC, PM_TIME_USEC, PM_TIME_MSEC, PM_TIME_SEC, PM_TIME_MIN, PM_TIME_HOUR };
19 static int sval[] = { 1, 1024*1024 };
20 static int sscale[] =
21 { PM_SPACE_BYTE, PM_SPACE_KBYTE, PM_SPACE_MBYTE, PM_SPACE_GBYTE, PM_SPACE_TBYTE };
23 int
24 main(int argc, char **argv)
26 int c;
27 int sts;
28 int errflag = 0;
29 const char *u;
30 #ifdef PCP_DEBUG
31 static char *debug = "[-D N] ";
32 #else
33 static char *debug = "";
34 #endif
35 static char *usage = "[-v]";
36 int vflag = 0;
37 pmAtomValue iv;
38 pmAtomValue ov;
39 pmAtomValue tv;
40 int d;
41 int i;
42 int j;
43 int k;
44 int l;
45 int underflow = 0;
47 __pmSetProgname(argv[0]);
49 while ((c = getopt(argc, argv, "D:v")) != EOF) {
50 switch (c) {
52 #ifdef PCP_DEBUG
53 case 'D': /* debug flag */
54 sts = __pmParseDebug(optarg);
55 if (sts < 0) {
56 fprintf(stderr, "%s: unrecognized debug flag specification (%s)\n",
57 pmProgname, optarg);
58 errflag++;
60 else
61 pmDebug |= sts;
62 break;
63 #endif
65 case 'v': /* verbose */
66 vflag++;
67 break;
69 case '?':
70 default:
71 errflag++;
72 break;
76 if (errflag) {
77 fprintf(stderr, "Usage: %s %s%s\n", pmProgname, debug, usage);
78 exit(1);
81 /* non-flag args are argv[optind] ... argv[argc-1] */
83 for (d = 1; d >= -1; d -=2) {
84 iu.dimTime = d;
85 ou.dimTime = d;
86 if (d == 1) {
87 iu.dimCount = -1;
88 ou.dimCount = -1;
90 else {
91 iu.dimCount = 1;
92 ou.dimCount = 1;
94 for (i = 0; i < sizeof(tval)/sizeof(tval[0]); i++) {
95 iv.ll = tval[i];
96 for (j = 0; j < sizeof(tscale)/sizeof(tscale[0]); j++) {
97 iu.scaleTime = tscale[j];
98 for (k = 0; k < sizeof(tscale)/sizeof(tscale[0]); k++) {
99 ou.scaleTime = tscale[k];
101 if ((sts = pmConvScale(PM_TYPE_64, &iv, &iu, &ov, &ou)) < 0) {
102 printf("convert: %s\n", pmErrStr(sts));
104 else {
105 if (vflag) {
106 u = pmUnitsStr(&iu);
107 printf("%lld %s", (long long)iv.ll, *u == '\0' ? "none" : u);
108 u = pmUnitsStr(&ou);
109 printf(" -> %lld %s\n", (long long)ov.ll, *u == '\0' ? "none" : u);
111 if ((sts = pmConvScale(PM_TYPE_64, &ov, &ou, &tv, &iu)) < 0) {
112 printf("reconvert: %s\n", pmErrStr(sts));
114 else {
115 if (tv.ll != iv.ll) {
116 if (ov.ll == 0)
117 underflow++;
118 else {
119 u = pmUnitsStr(&iu);
120 printf("error? %lld %s", (long long)iv.ll, *u == '\0' ? "none" : u);
121 u = pmUnitsStr(&ou);
122 printf(" -> %lld %s", (long long)ov.ll, *u == '\0' ? "none" : u);
123 u = pmUnitsStr(&iu);
124 printf(" -> %lld %s\n", (long long)tv.ll, *u == '\0' ? "none" : u);
133 printf("\nPass 1: plus %d underflows to zero\n\n", underflow);
134 underflow = 0;
136 ou.dimTime = 0;
137 iu.dimTime = 0;
138 ou.dimCount = 0;
139 iu.dimCount = 0;
140 ou.dimSpace = 1;
141 iu.dimSpace = 1;
142 iu.scaleTime = PM_TIME_SEC;
143 for (d = 0; d < 4; d +=2) {
144 ou.dimTime = -d;
145 iu.dimTime = -d;
146 for (i = 0; i < sizeof(sval)/sizeof(sval[0]); i++) {
147 iv.ll = sval[i];
148 for (j = 0; j < sizeof(sscale)/sizeof(sscale[0]); j++) {
149 iu.scaleSpace = sscale[j];
150 for (k = 0; k < sizeof(sscale)/sizeof(sscale[0]); k++) {
151 ou.scaleSpace = sscale[k];
152 for (l = 2; l < sizeof(tscale)/sizeof(tscale[0]); l += 2) {
153 ou.scaleTime = tscale[l];
155 if ((sts = pmConvScale(PM_TYPE_64, &iv, &iu, &ov, &ou)) < 0) {
156 printf("convert: %s\n", pmErrStr(sts));
158 else {
159 if (vflag) {
160 u = pmUnitsStr(&iu);
161 printf("%lld %s", (long long)iv.ll, *u == '\0' ? "none" : u);
162 u = pmUnitsStr(&ou);
163 printf(" -> %lld %s\n", (long long)ov.ll, *u == '\0' ? "none" : u);
165 if ((sts = pmConvScale(PM_TYPE_64, &ov, &ou, &tv, &iu)) < 0) {
166 printf("reconvert: %s\n", pmErrStr(sts));
168 else {
169 if (tv.ll != iv.ll) {
170 if (ov.ll == 0)
171 underflow++;
172 else {
173 u = pmUnitsStr(&iu);
174 printf("error? %lld %s", (long long)iv.ll, *u == '\0' ? "none" : u);
175 u = pmUnitsStr(&ou);
176 printf(" -> %lld %s", (long long)ov.ll, *u == '\0' ? "none" : u);
177 u = pmUnitsStr(&iu);
178 printf(" -> %lld %s\n", (long long)tv.ll, *u == '\0' ? "none" : u);
183 if (d == 0)
184 break;
190 printf("\nPass 2: plus %d underflows to zero\n", underflow);
192 iu.dimSpace = 0;
193 iu.scaleSpace = 0;
194 iu.scaleTime = PM_TIME_MSEC;
195 for (d = 1; d > -2; d -= 2) {
196 iu.dimTime = d;
197 iu.dimCount = -d;
198 for (i = 3; i >= -3; i--) {
199 iu.scaleCount = i;
200 printf("{ %3d,%3d,%3d,%3d,%3d,%3d } %s\n",
201 iu.dimSpace, iu.dimTime, iu.dimCount,
202 iu.scaleSpace, iu.scaleTime, iu.scaleCount,
203 pmUnitsStr(&iu));
206 printf("\nPass 3:\n");
208 exit(0);