From ba7eb2123974a05bdd807e996e4f39246e704f38 Mon Sep 17 00:00:00 2001 From: Thomas Braun Date: Mon, 19 Aug 2024 22:33:49 +0200 Subject: [PATCH] MIES_SweepFormula.ipf: Enhance mismatched waves message for basic math operations --- Packages/MIES/MIES_SweepFormula.ipf | 29 ++++++++++++--- .../Basic/UTF_SweepFormula_Operations.ipf | 36 +++++++++++++++++++ Packages/tests/UTF_DataGenerators.ipf | 8 +++++ 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/Packages/MIES/MIES_SweepFormula.ipf b/Packages/MIES/MIES_SweepFormula.ipf index ca07c9b4cf..e0c0ae2e30 100644 --- a/Packages/MIES/MIES_SweepFormula.ipf +++ b/Packages/MIES/MIES_SweepFormula.ipf @@ -3268,6 +3268,27 @@ static Function/WAVE SF_OperationEpochsImpl(string graph, WAVE/T epochPatterns, return output End +static Function SF_AssertOnMismatchedWaves(WAVE data0, WAVE data1, string opShort) + + string msg, size0Str, size1Str + variable ret + + ret = EqualWaves(data0, data1, EQWAVES_DIMSIZE) + + if(ret) + return NaN + endif + + WAVE size0 = GetWaveDimensions(data0) + WAVE size1 = GetWaveDimensions(data1) + + size0Str = NumericWaveToList(size0, ", ", trailSep = 0) + size1Str = NumericWaveToList(size1, ", ", trailSep = 0) + sprintf msg, "%s: wave size mismatch [%s] vs [%s]", opShort, size0Str, size1Str + + SFH_ASSERT(ret, msg) +End + static Function/WAVE SF_OperationMinus(variable jsonId, string jsonPath, string graph) WAVE output = SF_IndexOverDataSetsForPrimitiveOperation(jsonId, jsonpath, graph, SF_OPSHORT_MINUS) @@ -3296,7 +3317,7 @@ static Function/WAVE SF_OperationMinusImplDataSets(WAVE/Z data0, WAVE/Z data1) CopyScales data1, result return result endif - SFH_ASSERT(EqualWaves(data0, data1, EQWAVES_DIMSIZE), "minus: wave size mismatch") + SF_AssertOnMismatchedWaves(data0, data1, SF_OPSHORT_MINUS) MatrixOp/FREE result = data0 - data1 CopyScales data0, result @@ -3331,7 +3352,7 @@ static Function/WAVE SF_OperationPlusImplDataSets(WAVE/Z data0, WAVE/Z data1) CopyScales data1, result return result endif - SFH_ASSERT(EqualWaves(data0, data1, EQWAVES_DIMSIZE), "plus: wave size mismatch") + SF_AssertOnMismatchedWaves(data0, data1, SF_OPSHORT_PLUS) MatrixOp/FREE result = data0 + data1 CopyScales data0, result @@ -3466,7 +3487,7 @@ static Function/WAVE SF_OperationDivImplDataSets(WAVE/Z data0, WAVE/Z data1) CopyScales data1, result return result endif - SFH_ASSERT(EqualWaves(data0, data1, EQWAVES_DIMSIZE), "div: wave size mismatch") + SF_AssertOnMismatchedWaves(data0, data1, SF_OPSHORT_DIV) MatrixOp/FREE result = data0 / data1 CopyScales data0, result @@ -3501,7 +3522,7 @@ static Function/WAVE SF_OperationMultImplDataSets(WAVE/Z data0, WAVE/Z data1) CopyScales data1, result return result endif - SFH_ASSERT(EqualWaves(data0, data1, EQWAVES_DIMSIZE), "mult: wave size mismatch") + SF_AssertOnMismatchedWaves(data0, data1, SF_OPSHORT_MULT) MatrixOp/FREE result = data0 * data1 CopyScales data0, result diff --git a/Packages/tests/Basic/UTF_SweepFormula_Operations.ipf b/Packages/tests/Basic/UTF_SweepFormula_Operations.ipf index aae0e0282c..787b4b416c 100644 --- a/Packages/tests/Basic/UTF_SweepFormula_Operations.ipf +++ b/Packages/tests/Basic/UTF_SweepFormula_Operations.ipf @@ -2411,3 +2411,39 @@ static Function TPWithModelCell() Make/D/FREE ref = {17.3667394014963} CHECK_EQUAL_WAVES(ref, results, mode = WAVE_DATA) End + +// IUTF_TD_GENERATOR DataGenerators#GetBasicMathOperations +static Function BasicMathMismatchedWaves([string str]) + + string code, win, opShort, error + + win = GetDataBrowserWithData() + + sprintf code, "[1, 2] %s [[1, 2]]", str + try + WAVE/WAVE output = SF_ExecuteFormula(code, win, useVariables = 0) + FAIL() + catch + CHECK_NO_RTE() + endtry + + strswitch(str) + case "*": + opShort = "mult" + break + case "/": + opShort = "div" + break + case "+": + opShort = "plus" + break + case "-": + opShort = "minus" + break + default: + FAIL() + endswitch + + error = ROStr(GetSweepFormulaParseErrorMessage()) + CHECK_EQUAL_STR(error, opShort + ": wave size mismatch [2, 0, 0, 0] vs [1, 2, 0, 0]") +End diff --git a/Packages/tests/UTF_DataGenerators.ipf b/Packages/tests/UTF_DataGenerators.ipf index 6b1a74e6f1..6dd8dedcd8 100644 --- a/Packages/tests/UTF_DataGenerators.ipf +++ b/Packages/tests/UTF_DataGenerators.ipf @@ -868,3 +868,11 @@ static Function/WAVE GetDifferentGraphs() return wv End + +static Function/WAVE GetBasicMathOperations() + Make/FREE/T op = {"+", "-", "*", "/"} + + SetDimensionLabels(OP, "plus;minus;mult;div;", ROWS) + + return op +End