Mercurial > repos > public > sbplib
annotate +grid/evalOnTest.m @ 1198:2924b3a9b921 feature/d2_compatible
Add OpSet for fully compatible D2Variable, created from regular D2Variable by replacing d1 by first row of D1. Formal reduction by one order of accuracy at the boundary point.
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Fri, 16 Aug 2019 14:30:28 -0700 |
parents | 190941ec12d8 |
children |
rev | line source |
---|---|
157 | 1 function tests = evalOnTest() |
2 tests = functiontests(localfunctions); | |
3 end | |
4 | |
5 function testInputConstant(testCase) | |
6 in = { | |
7 0, | |
8 47, | |
9 1, | |
10 [1; 2], | |
11 }; | |
12 | |
13 out = { | |
14 [0; 0; 0], | |
15 [47; 47; 47], | |
16 [1; 1; 1], | |
17 [1; 2; 1; 2; 1; 2], | |
18 }; | |
19 | |
20 g = getTestGrid('1d'); | |
21 | |
22 for i = 1:length(in) | |
23 gf = grid.evalOn(g,in{i}); | |
24 testCase.verifyEqual(gf, out{i}); | |
25 end | |
26 end | |
27 | |
277
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
28 % evalOn should give and error if the number of inputs to func is not the same as |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
29 % the number of dimensions of the grid. |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
30 function testNumberOfInputs(testCase) |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
31 cases = { |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
32 {getTestGrid('1d'), @(x,y)x-y}, |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
33 {getTestGrid('2d'), @(x)x }, |
623
190941ec12d8
Print cleaning of evalOn and evalOnTest
Jonatan Werpers <jonatan@werpers.com>
parents:
277
diff
changeset
|
34 }; |
277
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
35 |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
36 for i = 1:length(cases) |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
37 g = cases{i}{1}; |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
38 f = cases{i}{2}; |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
39 testCase.verifyError(@()grid.evalOn(g, f),'grid:evalOn:WrongNumberOfInputs',sprintf('in(%d) = %s',i,toString(f))); |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
40 end |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
41 end |
4c3f55a628c8
Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
157
diff
changeset
|
42 |
157 | 43 function testInputScalarFunction1d(testCase) |
44 in = { | |
45 @(x)1+x*0, | |
46 @(x)x, | |
47 @(x)x.*x, | |
48 }; | |
49 | |
50 out = { | |
51 [1; 1; 1], | |
52 [0; 1; 2], | |
53 [0; 1; 4], | |
54 }; | |
55 | |
56 g = getTestGrid('1d'); | |
57 | |
58 for i = 1:length(in) | |
59 gf = grid.evalOn(g,in{i}); | |
60 testCase.verifyEqual(gf, out{i}); | |
61 end | |
62 end | |
63 | |
64 function testInputScalarFunction2d(testCase) | |
65 in = { | |
66 @(x,y)1+x*0, | |
67 @(x,y)x-y, | |
68 @(x,y)x./(1+y), | |
69 }; | |
70 | |
71 out = { | |
72 [1; 1; 1; 1; 1; 1; 1; 1; 1], | |
73 [0; -1; -2; 1; 0; -1; 2; 1; 0], | |
74 [0; 0; 0; 1; 1/2; 1/3; 2; 1; 2/3], | |
75 }; | |
76 | |
77 g = getTestGrid('2d'); | |
78 | |
79 for i = 1:length(in) | |
80 gf = grid.evalOn(g, in{i}); | |
81 testCase.verifyEqual(gf, out{i}); | |
82 end | |
83 end | |
84 | |
85 | |
86 function testInputVectorFunction(testCase) | |
87 g = getTestGrid('1d'); | |
88 in = @(x)[x; -2*x]; | |
89 out = [0; 0; 1; -2; 2; -4]; | |
90 | |
91 gf = grid.evalOn(g,in); | |
92 testCase.verifyEqual(gf, out); | |
93 | |
94 g = getTestGrid('2d'); | |
95 in = @(x,y)[x.^2; -2*y]; | |
96 out = [ | |
97 0; 0; | |
98 0; -2; | |
99 0; -4; | |
100 1; 0; | |
101 1; -2; | |
102 1; -4; | |
103 4; 0; | |
104 4; -2; | |
105 4; -4; | |
106 ]; | |
107 | |
108 gf = grid.evalOn(g,in); | |
109 testCase.verifyEqual(gf, out); | |
110 end | |
111 | |
112 | |
113 function testInputErrorVectorValued(testCase) | |
623
190941ec12d8
Print cleaning of evalOn and evalOnTest
Jonatan Werpers <jonatan@werpers.com>
parents:
277
diff
changeset
|
114 in = { |
157 | 115 [1,2,3], |
623
190941ec12d8
Print cleaning of evalOn and evalOnTest
Jonatan Werpers <jonatan@werpers.com>
parents:
277
diff
changeset
|
116 @(x,y)[x,-y], |
157 | 117 }; |
118 | |
119 g = getTestGrid('2d'); | |
120 | |
121 for i = 1:length(in) | |
122 testCase.verifyError(@()grid.evalOn(g, in{i}),'grid:evalOn:VectorValuedWrongDim',sprintf('in(%d) = %s',i,toString(in{i}))); | |
123 end | |
124 end | |
125 | |
126 function g = getTestGrid(d) | |
127 switch d | |
128 case '1d' | |
129 g = grid.equidistant(3,{0,2}); | |
130 case '2d' | |
131 g = grid.equidistant([3,3],{0,2},{0,2}); | |
132 end | |
133 end |