From f47b8d3445f458f312e8654cdbb5000d68f6a6cc Mon Sep 17 00:00:00 2001
From: Jakob Gabriel <jakob.gabriel@uni-ulm.de>
Date: Tue, 1 Sep 2020 17:46:11 +0200
Subject: [PATCH] #45 closed: fixed problem with derivatives of symbolic and
 wrote unittest.

---
 +quantity/Symbolic.m                | 19 ++++++-------------
 +unittests/+quantity/testSymbolic.m | 14 ++++++++++++++
 2 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/+quantity/Symbolic.m b/+quantity/Symbolic.m
index b7fd9e2..3c9fb48 100644
--- a/+quantity/Symbolic.m
+++ b/+quantity/Symbolic.m
@@ -151,20 +151,13 @@ classdef Symbolic < quantity.Function
 			res = ~(A==B);
 		end
 		
-% 		function Q = quantity.Discrete(obj, varargin)
-% 			% Cast of a quantity.Symbolic object into a quantity.Discrete
-% 			% object.
-% 			myParser = misc.Parser();
-% 			myParser.addParameter('domain', obj(1).domain);
-% 			myParser.addParameter('name', obj(1).name);
-% 			myParser.parse(varargin{:});
-% 			Q = quantity.Discrete(obj.on(), ...
-% 				'domain', myParser.Results.domain, ...
-% 				'name', myParser.Results.name);
-% 		end	
 		function f = function_handle(obj)
 			f = matlabFunction(sym(obj));
-		end
+			if nargin(f) ~= nargin(obj)
+				warning("function_handle has not all domains as variables")
+			end
+		end % function_handle
+		
 		function F = quantity.Function(obj, varargin)
 			myParser = misc.Parser();
 			myParser.addParameter('domain', obj(1).domain);
@@ -806,7 +799,7 @@ classdef Symbolic < quantity.Function
 			[result.valueDiscrete] = deal([]);
 			for l = 1:numel(obj)
 				result(l).valueSymbolic = diff(obj(l).valueSymbolic, diffGridName, k);
-				result(l).valueContinuous = obj.setValueContinuous(result(l).valueSymbolic, obj(1).variable);
+				result(l).valueContinuous = obj.setValueContinuous(result(l).valueSymbolic, [obj(1).domain.name]);
 			end
 		end		
 		
diff --git a/+unittests/+quantity/testSymbolic.m b/+unittests/+quantity/testSymbolic.m
index 4b6aa3e..da82d16 100644
--- a/+unittests/+quantity/testSymbolic.m
+++ b/+unittests/+quantity/testSymbolic.m
@@ -4,6 +4,20 @@ function [tests ] = testSymbolic()
 tests = functiontests(localfunctions());
 end
 
+function testDiffOfConstants(tc)
+% unittest to fix a bug...
+z = quantity.Domain("z", linspace(0, 1, 4));
+K0 = quantity.Symbolic.zeros(1, z);%[z, zeta]);
+tc.verifyEqual(K0.on(), zeros([4, 1]));
+
+K1 = quantity.Symbolic.ones(1, z);%[z, zeta]);
+tc.verifyEqual(K1.diff("z", 1).on(), zeros([4, 1]));
+
+zeta = quantity.Domain("zeta", linspace(0, 1, 5));
+K2 = quantity.Symbolic.ones([2, 2], [z, zeta]);
+tc.verifyEqual(K2.diff("z", 1).on(), zeros([4, 5, 2, 2]));
+end % testDiffOfConstants
+
 function testZeroOn(tc)
 % unittest to fix a bug related with isConstant usage in on() of symbolic
 z = quantity.Domain("z", linspace(0, 1, 11));
-- 
GitLab