File indexing completed on 2024-05-19 04:32:48
0001 /* 0002 * Copyright 2006, The University of Toronto 0003 * Licensed under GPL. 0004 */ 0005 0006 #include "ksttestcase.h" 0007 #include "kstpsd.h" 0008 #include "kstdataobject.h" 0009 0010 #include <kstdataobjectcollection.h> 0011 #include <kstandarddirs.h> 0012 #include <qtemporaryfile.h> 0013 #include <qdir.h> 0014 #include <qfile.h> 0015 0016 0017 static void exitHelper() { 0018 // TODO: garbage collection. 0019 } 0020 0021 0022 int rc = KstTestSuccess; 0023 0024 #define doTest(x) testAssert(x, QString("Line %1").arg(__LINE__)) 0025 #define doTestD(x, y) testAssert(x, QString("%1: %2").arg(__LINE__).arg(y)) 0026 0027 void testAssert(bool result, const QString& text = "Unknown") { 0028 if (!result) { 0029 KstTestFailed(); 0030 printf("Test [%s] failed.\n", text.toLatin1().data()); 0031 } 0032 } 0033 0034 QDomDocument makeDOMElement(const QString& tag, const QString& val) { 0035 // Should be some boundary checking in the constructor. 0036 QDomDocument psdDOM("psddocument"); 0037 QDomElement psdElement, child; 0038 QDomText text; 0039 0040 psdElement = psdDOM.createElement("psdDOMTest"); 0041 0042 child = psdDOM.createElement("tag"); 0043 text = psdDOM.createTextNode(tag); 0044 child.appendChild(text); 0045 psdElement.appendChild(child); 0046 0047 child = psdDOM.createElement("vectag"); 0048 text = psdDOM.createTextNode(val); 0049 child.appendChild(text); 0050 psdElement.appendChild(child); 0051 0052 child = psdDOM.createElement("sampRate"); 0053 text = psdDOM.createTextNode("128"); 0054 child.appendChild(text); 0055 psdElement.appendChild(child); 0056 0057 child = psdDOM.createElement("average"); 0058 text = psdDOM.createTextNode("1"); 0059 child.appendChild(text); 0060 psdElement.appendChild(child); 0061 0062 child = psdDOM.createElement("fiftLen"); 0063 text = psdDOM.createTextNode("5"); 0064 child.appendChild(text); 0065 psdElement.appendChild(child); 0066 0067 child = psdDOM.createElement("adopize"); 0068 text = psdDOM.createTextNode("0"); 0069 child.appendChild(text); 0070 psdElement.appendChild(child); 0071 0072 child = psdDOM.createElement("apodizefxn"); 0073 text = psdDOM.createTextNode("WindowOriginal"); 0074 child.appendChild(text); 0075 psdElement.appendChild(child); 0076 0077 child = psdDOM.createElement("gaussiansigma"); 0078 text = psdDOM.createTextNode("0.01"); 0079 child.appendChild(text); 0080 psdElement.appendChild(child); 0081 0082 child = psdDOM.createElement("removeMean"); 0083 text = psdDOM.createTextNode("1"); 0084 child.appendChild(text); 0085 psdElement.appendChild(child); 0086 0087 child = psdDOM.createElement("VUnits"); 0088 text = psdDOM.createTextNode("vUnits"); 0089 child.appendChild(text); 0090 psdElement.appendChild(child); 0091 0092 child = psdDOM.createElement("RUnits"); 0093 text = psdDOM.createTextNode("rUnits"); 0094 child.appendChild(text); 0095 psdElement.appendChild(child); 0096 0097 child = psdDOM.createElement("output"); 0098 text = psdDOM.createTextNode("PSDAmplitudeSpectralDensity"); 0099 child.appendChild(text); 0100 psdElement.appendChild(child); 0101 0102 child = psdDOM.createElement("interpolateHoles"); 0103 text = psdDOM.createTextNode("1"); 0104 child.appendChild(text); 0105 psdElement.appendChild(child); 0106 0107 psdDOM.appendChild(psdElement); 0108 0109 return psdDOM; 0110 } 0111 0112 void doTests() { 0113 0114 KstVectorPtr vp = new KstVector(KstObjectTag::fromString("tempVector"), 10); 0115 for (int i = 0; i < 10; i++){ 0116 vp->value()[i] = i; 0117 } 0118 0119 KstPSDPtr psd = new KstPSD(QString("psdTest"), vp, 0.0, false, 10, false, false, QString("vUnits"), QString("rUnits"), WindowUndefined, 0.0, PSDUndefined); 0120 doTest(psd->tagName() == "psdTest"); 0121 doTest(psd->vTag() == "tempVector"); 0122 doTest(psd->output() == PSDUndefined); 0123 doTest(!psd->apodize()); 0124 doTest(!psd->removeMean()); 0125 doTest(!psd->average()); 0126 doTest(psd->freq() == 0.0); 0127 doTest(psd->apodizeFxn() == WindowUndefined); 0128 doTest(psd->gaussianSigma() == 0); 0129 KstVectorPtr vpVX = psd->vX(); 0130 KstVectorPtr vpVY = psd->vY(); 0131 0132 doTest(vpVX->length() == 1); 0133 doTest(vpVX->value()[0] != vpVX->value()[0]); 0134 doTest(vpVY->length() == 1); 0135 doTest(vpVY->value()[0] != vpVY->value()[0]); 0136 0137 psd->writeLock(); 0138 doTest(psd->update(0) == KstObject::UPDATE); 0139 psd->unlock(); 0140 0141 for(int j = 0; j < vpVX->length(); j++){ 0142 doTest(vpVX->value()[j] == 0); 0143 } 0144 0145 psd->setOutput(PSDAmplitudeSpectralDensity); 0146 psd->setApodize(true); 0147 psd->setRemoveMean(true); 0148 psd->setAverage(true); 0149 psd->setFreq(0.1); 0150 psd->setApodizeFxn(WindowOriginal); 0151 psd->setGaussianSigma(0.2); 0152 0153 doTest(psd->tagName() == "psdTest"); 0154 doTest(psd->vTag() == "tempVector"); 0155 doTest(psd->output() == PSDAmplitudeSpectralDensity); 0156 doTest(psd->apodize()); 0157 doTest(psd->removeMean()); 0158 doTest(psd->average()); 0159 doTest(psd->freq() == 0.1); 0160 doTest(psd->apodizeFxn() == WindowOriginal); 0161 doTest(psd->gaussianSigma() == 0.2); 0162 0163 // doTest(psd->update(0) == KstObject::UPDATE); 0164 // QString ps = "PSD: " + psd->vTag(); 0165 // doTest(psd->propertyString() == ps); 0166 // doTest(!psd->curveHints().curveName() == ""); 0167 // printf("Curve name [%s]", kstCHL[0].curveName()); 0168 // printf("X Vector name [%s]", kstCHL[0].xVectorName()); 0169 // printf("Y Vector name [%s]", kstCHL[0].yVectorName()); 0170 0171 QTemporaryFile tf; 0172 tf.open(); 0173 QTextStream ts(&tf); 0174 psd->save(ts, ""); 0175 QFile::remove(tf.fileName()); 0176 0177 QDomNode n = makeDOMElement("psdDOMPsd", "psdDOMVector").firstChild(); 0178 QDomElement e = n.toElement(); 0179 KstPSDPtr psdDOM = new KstPSD(e); 0180 0181 doTest(psdDOM->tagName() == "psdDOMPsd"); 0182 doTest(psdDOM->output() == PSDAmplitudeSpectralDensity); 0183 doTest(psdDOM->apodize()); 0184 doTest(psdDOM->removeMean()); 0185 doTest(psdDOM->average()); 0186 doTest(psdDOM->freq() == 128); 0187 doTest(psdDOM->apodizeFxn() == WindowOriginal); 0188 doTest(psdDOM->gaussianSigma() == 0.01); 0189 0190 // KstVectorPtr vpVX = psdDOM->vX(); 0191 // for(int j = 0; j < vpVX->length(); j++){ 0192 // printf("[%d][%lf]", j, vpVX->value()[j]); 0193 // } 0194 // KstVectorPtr vpVY = psdDOM->vY(); 0195 } 0196 0197 0198 int main(int argc, char **argv) { 0199 atexit(exitHelper); 0200 0201 QCoreApplication app(argc, argv); 0202 0203 doTests(); 0204 // Don't put tests in main because we need to ensure that no KstObjects 0205 // remain past the exit handler 0206 0207 exitHelper(); // need to run it here before kapp goes away in some cases. 0208 if (rc == KstTestSuccess) { 0209 printf("All tests passed!\n"); 0210 } 0211 return -rc; 0212 } 0213 0214 // vim: ts=2 sw=2 et