From dc78465166562e9b6a01de2e57f9923f16ea5103 Mon Sep 17 00:00:00 2001 From: Ferdinand Fischer <ferdinand.fischer@uni-ulm.de> Date: Mon, 31 Aug 2020 13:55:01 +0200 Subject: [PATCH] fixed a bug in the evaluation of quantity.Symbolic on numeric grids, --- +quantity/Discrete.m | 8 +++++++- +unittests/+quantity/testSymbolic.m | 19 ++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/+quantity/Discrete.m b/+quantity/Discrete.m index 31db4d8..54ed820 100644 --- a/+quantity/Discrete.m +++ b/+quantity/Discrete.m @@ -427,7 +427,13 @@ classdef (InferiorClasses = {?quantity.Symbolic}) Discrete ... myDomain = misc.ensureIsCell(myDomain); newGrid = myDomain; - if obj(1).isConstant() + % Check if the object has a domain with a name: + % If there is no name, the object has an empty quantity.Domain, i.e., it is a + % constant. Then, the gridNames should be '' + % The check "isConstant" can not be used here, because it also returns true, if + % the constant value is defined over a domain. Then, the object has a domain + % with a name that should be used. + if isempty(obj(1).domain.name) gridNames = repmat({''}, length(newGrid)); else gridNames = {obj(1).domain.name}; diff --git a/+unittests/+quantity/testSymbolic.m b/+unittests/+quantity/testSymbolic.m index 87b447c..b4ed478 100644 --- a/+unittests/+quantity/testSymbolic.m +++ b/+unittests/+quantity/testSymbolic.m @@ -853,22 +853,32 @@ testCase.verifyEqual(on( - fDisc), on(-f)); end function testConstantValues(testCase) -%% +%% evaluation of a constant on the same grid syms z myDomain = quantity.Domain.defaultDomain(4, "z"); q = quantity.Symbolic(magic(3), myDomain); -%% magic7 = magic(3); magic700 = zeros(4, 3, 3); for k = 1:q(1).domain.gridLength() magic700(k, :,:) = magic7; end -%% testCase.verifyEqual(magic700, q.on()); testCase.verifyTrue(q.isConstant()); +%% evaluation of a constant on a different grid +myDomain2 = quantity.Domain.defaultDomain(7, "z"); +magic7 = magic(3); +magic700 = zeros(myDomain2.n, 3, 3); +for k = 1:myDomain2.n + magic700(k, :,:) = magic7; +end +q.on(myDomain2); + +testCase.verifyEqual(magic700, q.on(myDomain2)); + +%% p = quantity.Symbolic([0 0 0 0 z], myDomain); testCase.verifyFalse(p.isConstant()); @@ -935,6 +945,9 @@ Q2D = quantity.Symbolic(magic(2), [Z, Zeta]); %% verifyEqual(testCase, shiftdim(Q.on(), 1), magic(2)) verifyEqual(testCase, shiftdim(Q2D.on(), 2), magic(2)) + +%% test the evaluation on numeric grids +verifyEqual(testCase, shiftdim(Q.on(1), 1), magic(2)) end function testSize(testCase) -- GitLab