1 | using Microsoft.VisualStudio.TestTools.UnitTesting;
|
---|
2 | using System;
|
---|
3 | using HeuristicLab.Problems.DataAnalysis;
|
---|
4 | using System.Globalization;
|
---|
5 |
|
---|
6 | namespace Tests {
|
---|
7 | [TestClass]
|
---|
8 | public class ShapeConstraintsParserTest {
|
---|
9 | [TestMethod]
|
---|
10 | public void TestFunctionRangeConstraints() {
|
---|
11 | System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
|
---|
12 | {
|
---|
13 | var constraint = ShapeConstraintsParser.ParseFunctionRangeConstraint("f in [1 .. 2]");
|
---|
14 | Assert.AreEqual(string.Empty, constraint.Variable);
|
---|
15 | Assert.AreEqual(0, constraint.NumberOfDerivations);
|
---|
16 | Assert.AreEqual(false, constraint.IsDerivative);
|
---|
17 | Assert.AreEqual(1.0, constraint.Weight);
|
---|
18 | Assert.AreEqual(0, constraint.Regions.Count);
|
---|
19 | Assert.AreEqual(1.0, constraint.Interval.LowerBound);
|
---|
20 | Assert.AreEqual(2.0, constraint.Interval.UpperBound);
|
---|
21 | }
|
---|
22 | {
|
---|
23 | var constraint = ShapeConstraintsParser.ParseFunctionRangeConstraint("f in [1 2]");
|
---|
24 | Assert.AreEqual(string.Empty, constraint.Variable);
|
---|
25 | Assert.AreEqual(0, constraint.NumberOfDerivations);
|
---|
26 | Assert.AreEqual(false, constraint.IsDerivative);
|
---|
27 | Assert.AreEqual(1.0, constraint.Weight);
|
---|
28 | Assert.AreEqual(0, constraint.Regions.Count);
|
---|
29 | Assert.AreEqual(1.0, constraint.Interval.LowerBound);
|
---|
30 | Assert.AreEqual(2.0, constraint.Interval.UpperBound);
|
---|
31 | }
|
---|
32 | {
|
---|
33 | var constraint = ShapeConstraintsParser.ParseFunctionRangeConstraint("f in [1; 2]");
|
---|
34 | Assert.AreEqual(string.Empty, constraint.Variable);
|
---|
35 | Assert.AreEqual(0, constraint.NumberOfDerivations);
|
---|
36 | Assert.AreEqual(false, constraint.IsDerivative);
|
---|
37 | Assert.AreEqual(1.0, constraint.Weight);
|
---|
38 | Assert.AreEqual(0, constraint.Regions.Count);
|
---|
39 | Assert.AreEqual(1.0, constraint.Interval.LowerBound);
|
---|
40 | Assert.AreEqual(2.0, constraint.Interval.UpperBound);
|
---|
41 | }
|
---|
42 | {
|
---|
43 | var constraint = ShapeConstraintsParser.ParseFunctionRangeConstraint("f in [1 .. 2] weight: 2.0");
|
---|
44 | Assert.AreEqual(string.Empty, constraint.Variable);
|
---|
45 | Assert.AreEqual(0, constraint.NumberOfDerivations);
|
---|
46 | Assert.AreEqual(false, constraint.IsDerivative);
|
---|
47 | Assert.AreEqual(2.0, constraint.Weight);
|
---|
48 | Assert.AreEqual(0, constraint.Regions.Count);
|
---|
49 | Assert.AreEqual(1.0, constraint.Interval.LowerBound);
|
---|
50 | Assert.AreEqual(2.0, constraint.Interval.UpperBound);
|
---|
51 | }
|
---|
52 | {
|
---|
53 | var constraint = ShapeConstraintsParser.ParseFunctionRangeConstraint("f in [1 .. 2], x in [2 .. 3], y in [4 .. 5]");
|
---|
54 | Assert.AreEqual(string.Empty, constraint.Variable);
|
---|
55 | Assert.AreEqual(0, constraint.NumberOfDerivations);
|
---|
56 | Assert.AreEqual(false, constraint.IsDerivative);
|
---|
57 | Assert.AreEqual(1.0, constraint.Weight);
|
---|
58 | Assert.AreEqual(2, constraint.Regions.Count);
|
---|
59 | Assert.AreEqual(2, constraint.Regions.GetInterval("x").LowerBound);
|
---|
60 | Assert.AreEqual(3, constraint.Regions.GetInterval("x").UpperBound);
|
---|
61 | Assert.AreEqual(4, constraint.Regions.GetInterval("y").LowerBound);
|
---|
62 | Assert.AreEqual(5, constraint.Regions.GetInterval("y").UpperBound);
|
---|
63 | Assert.AreEqual(1.0, constraint.Interval.LowerBound);
|
---|
64 | Assert.AreEqual(2.0, constraint.Interval.UpperBound);
|
---|
65 | }
|
---|
66 | {
|
---|
67 | var constraint = ShapeConstraintsParser.ParseFunctionRangeConstraint("f in [1 .. 2], x in [2 .. 3], y in [4 .. 5] weight: 2.0");
|
---|
68 | Assert.AreEqual(string.Empty, constraint.Variable);
|
---|
69 | Assert.AreEqual(0, constraint.NumberOfDerivations);
|
---|
70 | Assert.AreEqual(false, constraint.IsDerivative);
|
---|
71 | Assert.AreEqual(2.0, constraint.Weight);
|
---|
72 | Assert.AreEqual(2, constraint.Regions.Count);
|
---|
73 | Assert.AreEqual(2, constraint.Regions.GetInterval("x").LowerBound);
|
---|
74 | Assert.AreEqual(3, constraint.Regions.GetInterval("x").UpperBound);
|
---|
75 | Assert.AreEqual(4, constraint.Regions.GetInterval("y").LowerBound);
|
---|
76 | Assert.AreEqual(5, constraint.Regions.GetInterval("y").UpperBound);
|
---|
77 | Assert.AreEqual(1.0, constraint.Interval.LowerBound);
|
---|
78 | Assert.AreEqual(2.0, constraint.Interval.UpperBound);
|
---|
79 | }
|
---|
80 | }
|
---|
81 | [TestMethod]
|
---|
82 | public void TestDerivationConstraints() {
|
---|
83 | System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
|
---|
84 | var variables = new string[] { "x", "var x" };
|
---|
85 | {
|
---|
86 | var constraint = ShapeConstraintsParser.ParseDerivationConstraint("df/dx in [1 .. 2]", variables);
|
---|
87 | Assert.AreEqual("x", constraint.Variable);
|
---|
88 | Assert.AreEqual(1, constraint.NumberOfDerivations);
|
---|
89 | Assert.AreEqual(true, constraint.IsDerivative);
|
---|
90 | Assert.AreEqual(1.0, constraint.Weight);
|
---|
91 | Assert.AreEqual(0, constraint.Regions.Count);
|
---|
92 | Assert.AreEqual(1.0, constraint.Interval.LowerBound);
|
---|
93 | Assert.AreEqual(2.0, constraint.Interval.UpperBound);
|
---|
94 | }
|
---|
95 | {
|
---|
96 | var constraint = ShapeConstraintsParser.ParseDerivationConstraint("d²f/dx² in [1 .. 2]", variables);
|
---|
97 | Assert.AreEqual("x", constraint.Variable);
|
---|
98 | Assert.AreEqual(2, constraint.NumberOfDerivations);
|
---|
99 | Assert.AreEqual(true, constraint.IsDerivative);
|
---|
100 | Assert.AreEqual(1.0, constraint.Weight);
|
---|
101 | Assert.AreEqual(0, constraint.Regions.Count);
|
---|
102 | Assert.AreEqual(1.0, constraint.Interval.LowerBound);
|
---|
103 | Assert.AreEqual(2.0, constraint.Interval.UpperBound);
|
---|
104 | }
|
---|
105 | {
|
---|
106 | var constraint = ShapeConstraintsParser.ParseDerivationConstraint("d² f / d x² in [1 .. 2]", variables);
|
---|
107 | Assert.AreEqual("x", constraint.Variable);
|
---|
108 | Assert.AreEqual(2, constraint.NumberOfDerivations);
|
---|
109 | Assert.AreEqual(true, constraint.IsDerivative);
|
---|
110 | Assert.AreEqual(1.0, constraint.Weight);
|
---|
111 | Assert.AreEqual(0, constraint.Regions.Count);
|
---|
112 | Assert.AreEqual(1.0, constraint.Interval.LowerBound);
|
---|
113 | Assert.AreEqual(2.0, constraint.Interval.UpperBound);
|
---|
114 | }
|
---|
115 | {
|
---|
116 | var constraint = ShapeConstraintsParser.ParseDerivationConstraint("d³ f / d 'var x'³ in [1 .. 2]", variables);
|
---|
117 | Assert.AreEqual("var x", constraint.Variable);
|
---|
118 | Assert.AreEqual(3, constraint.NumberOfDerivations);
|
---|
119 | Assert.AreEqual(true, constraint.IsDerivative);
|
---|
120 | Assert.AreEqual(1.0, constraint.Weight);
|
---|
121 | Assert.AreEqual(0, constraint.Regions.Count);
|
---|
122 | Assert.AreEqual(1.0, constraint.Interval.LowerBound);
|
---|
123 | Assert.AreEqual(2.0, constraint.Interval.UpperBound);
|
---|
124 | }
|
---|
125 | }
|
---|
126 | }
|
---|
127 | }
|
---|