/*************************************************************************** viewmode_check.cpp Unit test of PMusrViewMode, the class which decouples the musrview plot views (time/Fourier, difference d-f and f-d, average) from each other. Author: Andreas Suter e-mail: andreas.suter@psi.ch ***************************************************************************/ #include "PMusrViewMode.h" #include #include using namespace musrview; static void show(const char *what, const PMusrViewMode &m) { std::cout << what << " -> " << m.GetKey() << " | " << m.GetLabel() << "\n"; } int main() { PMusrViewMode m; show("initial", m); assert(m.GetKey() == "time"); // d then f => d-f m.ToggleDifference(); show("d", m); assert(m.GetKey() == "time+diff"); m.ToggleFourier(); show("d,f", m); assert(m.IsDiffThenFourier()); assert(m.GetKey() == "fourier-power+diff-df"); // now 'd' again: old code refused (d-f-d), new one simply drops the difference m.ToggleDifference(); show("d,f,d", m); assert(m.GetKey() == "fourier-power"); // f then d => f-d m.Reset(); m.ToggleFourier(); show("f", m); m.ToggleDifference(); show("f,d", m); assert(m.IsFourierThenDiff()); assert(m.GetKey() == "fourier-power+diff-fd"); // average is orthogonal: fourier-difference-average m.ToggleAverage(); show("f,d,a", m); assert(m.GetKey() == "fourier-power+diff-fd+avg"); assert(m.IsFourierThenDiff() && m.IsAverage() && m.IsFourier()); // component switch keeps difference + average m.SetFourierComponent(EFourierComponent::kReal); show("+real", m); assert(m.GetKey() == "fourier-real+diff-fd+avg"); assert(m.IsPhaseAdjustable()); m.SetFourierComponent(EFourierComponent::kPower); assert(!m.IsPhaseAdjustable()); // back to time domain keeps difference + average m.SetFourierComponent(EFourierComponent::kReal); m.ToggleFourier(); show("back to time", m); assert(m.GetKey() == "time+diff+avg"); assert(!m.IsPhaseAdjustable()); // and forward again -> difference was made in time domain => d-f m.ToggleFourier(); show("forward", m); assert(m.GetKey() == "fourier-real+diff-df+avg"); // capabilities PMusrViewMode n; n.SetFourierAllowed(false); assert(!n.ToggleFourier()); assert(n.IsTimeDomain()); n.SetAverageAllowed(false); assert(!n.ToggleAverage()); assert(!n.IsAverage()); show("non-musr", n); // capability revoked while active PMusrViewMode o; o.ToggleFourier(); o.ToggleAverage(); o.SetFourierAllowed(false); o.SetAverageAllowed(false); assert(o.IsTimeDomain() && !o.IsAverage()); show("revoked", o); std::cout << "\nJSON: " << m.ToJson() << "\n"; std::cout << "\nall mode assertions passed\n"; return 0; }