diff options
Diffstat (limited to 'qa/qt/qmc_indom/qmc_indom.cpp')
-rw-r--r-- | qa/qt/qmc_indom/qmc_indom.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/qa/qt/qmc_indom/qmc_indom.cpp b/qa/qt/qmc_indom/qmc_indom.cpp new file mode 100644 index 0000000..6b82913 --- /dev/null +++ b/qa/qt/qmc_indom/qmc_indom.cpp @@ -0,0 +1,133 @@ +// +// Test QmcIndom class +// + +#include <QTextStream> +#include <qmc_context.h> +#include <qmc_source.h> +#include <qmc_desc.h> +#include <qmc_indom.h> + +QTextStream cerr(stderr); +QTextStream cout(stdout); + +int +main(int argc, char* argv[]) +{ + int sts = 0; + int c; + + pmProgname = basename(argv[0]); + + while ((c = getopt(argc, argv, "D:?")) != EOF) { + switch (c) { + case 'D': + sts = __pmParseDebug(optarg); + if (sts < 0) { + pmprintf("%s: unrecognized debug flag specification (%s)\n", + pmProgname, optarg); + sts = 1; + } + else { + pmDebug |= sts; + sts = 0; + } + break; + case '?': + default: + sts = 1; + break; + } + } + + if (sts) { + pmprintf("Usage: %s\n", pmProgname); + pmflush(); + exit(1); + /*NOTREACHED*/ + } + + fprintf(stderr, "*** Lookup an indom ***\n"); + QString source = QString("archives/oview-short"); + QmcSource *src = QmcSource::getSource(PM_CONTEXT_ARCHIVE, source, false); + + if (src->status() < 0) { + pmprintf("%s: Error: Unable to create context to \"%s\": %s\n", + pmProgname, (const char *)source.toAscii(), + pmErrStr(src->status())); + pmflush(); + return 1; + } + + pmID hinv_map_cpu = pmid_build(1, 26, 9); + QmcDesc hinv_map_cpu_pmc(hinv_map_cpu); + + if (hinv_map_cpu_pmc.status() < 0) { + pmprintf("\n%s: Error: hinv.map.cpu: %s\n", + pmProgname, pmErrStr(hinv_map_cpu_pmc.status())); + pmflush(); + return 1; + } + + QmcIndom indom(PM_CONTEXT_ARCHIVE, hinv_map_cpu_pmc); + + if (indom.status() < 0) { + pmprintf("%s: Error: hinv.map.cpu: %s\n", + pmProgname, pmErrStr(indom.status())); + pmflush(); + return 1; + } + + indom.dump(cout); + + if (indom.diffProfile()) { + pmprintf("%s: Error: Profile requires updating but there is nothing in it\n", + pmProgname); + sts = 1; + } + + fprintf(stderr, "\n*** Reference one instance ***\n"); + indom.lookup("cpu:1.3.a"); + + if (!indom.diffProfile()) { + pmprintf("%s: Error: Profile should require updating but flag not set\n", + pmProgname); + sts = 1; + } + + indom.dump(cout); + indom.genProfile(); + + __pmProfile* profile = __pmHandleToPtr(pmWhichContext())->c_instprof; + __pmDumpProfile(stderr, PM_INDOM_NULL, profile); + + if (indom.diffProfile()) { + pmprintf("%s: Error: Profile just generated but flag still set\n", + pmProgname); + sts = 1; + } + + fprintf(stderr, "\n*** Reference all instances ***\n"); + indom.refAll(); + + if (!indom.diffProfile()) { + pmprintf("%s: Error: All instances referenced but profile flag unset\n", + pmProgname); + sts = 1; + } + + indom.dump(cout); + indom.genProfile(); + + profile = __pmHandleToPtr(pmWhichContext())->c_instprof; + __pmDumpProfile(stderr, PM_INDOM_NULL, profile); + + if (indom.diffProfile()) { + pmprintf("%s: Error: Profile just generated but flag still set\n", + pmProgname); + sts = 1; + } + + pmflush(); + return sts; +} |