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