danica 2.7.2 → 2.7.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.circleci/config.yml +71 -0
- data/.gitignore +6 -1
- data/.rubocop.yml +18 -0
- data/.rubocop_todo.yml +123 -0
- data/Dockerfile +22 -0
- data/Gemfile +2 -1
- data/README.md +9 -1
- data/Rakefile +4 -0
- data/config/check_specs.yml +13 -0
- data/config/rubycritc.rb +12 -0
- data/config/yardstick.rb +13 -0
- data/config/yardstick.yml +33 -0
- data/danica.gemspec +19 -10
- data/docker-compose.yml +14 -9
- data/lib/danica.rb +2 -1
- data/lib/danica/base_operations.rb +3 -0
- data/lib/danica/builder.rb +2 -0
- data/lib/danica/common.rb +8 -4
- data/lib/danica/dsl.rb +8 -6
- data/lib/danica/dsl/builder.rb +4 -1
- data/lib/danica/equation.rb +3 -3
- data/lib/danica/equation/builder.rb +2 -0
- data/lib/danica/exception.rb +3 -2
- data/lib/danica/expressable.rb +14 -8
- data/lib/danica/expression.rb +4 -2
- data/lib/danica/expression/gauss.rb +5 -5
- data/lib/danica/formatted.rb +27 -8
- data/lib/danica/function.rb +5 -3
- data/lib/danica/function/name.rb +2 -0
- data/lib/danica/operator.rb +13 -9
- data/lib/danica/operator/addition.rb +4 -3
- data/lib/danica/operator/chained.rb +4 -3
- data/lib/danica/operator/cos.rb +2 -1
- data/lib/danica/operator/division.rb +2 -1
- data/lib/danica/operator/exponential.rb +2 -1
- data/lib/danica/operator/functional.rb +3 -2
- data/lib/danica/operator/multiplication.rb +4 -2
- data/lib/danica/operator/power.rb +4 -3
- data/lib/danica/operator/sin.rb +2 -1
- data/lib/danica/operator/squared_root.rb +2 -1
- data/lib/danica/variables_holder.rb +7 -4
- data/lib/danica/variables_holder/alias_builder.rb +4 -4
- data/lib/danica/variables_holder/calculator.rb +2 -0
- data/lib/danica/variables_holder/store.rb +3 -2
- data/lib/danica/variables_holder/variables_builder.rb +2 -1
- data/lib/danica/version.rb +3 -1
- data/lib/danica/wrapper.rb +14 -9
- data/lib/danica/wrapper/constant.rb +10 -14
- data/lib/danica/wrapper/container.rb +3 -3
- data/lib/danica/wrapper/group.rb +3 -2
- data/lib/danica/wrapper/negative.rb +3 -1
- data/lib/danica/wrapper/number.rb +6 -3
- data/lib/danica/wrapper/plus_minus.rb +3 -1
- data/lib/danica/wrapper/variable.rb +13 -8
- data/scripts/check_readme.sh +6 -0
- data/scripts/rubycritic.sh +10 -0
- data/spec/integration/global/danica/formatted_spec.rb +87 -0
- data/spec/integration/global/danica/operator/addition_spec.rb +32 -0
- data/spec/integration/{multiplication_spec.rb → global/danica/operator/multiplication_spec.rb} +12 -9
- data/spec/integration/{power_spec.rb → global/danica/operator/power_spec.rb} +4 -2
- data/spec/integration/{negative_spec.rb → global/danica/wrapper/negative_spec.rb} +9 -8
- data/spec/integration/{plus_minus_spec.rb → global/danica/wrapper/plus_minus_spec.rb} +5 -4
- data/spec/integration/readme/constant_spec.rb +4 -1
- data/spec/integration/readme/danica/formatted_spec.rb +24 -0
- data/spec/integration/readme/danica_spec.rb +20 -4
- data/spec/integration/readme/equation_spec.rb +4 -2
- data/spec/integration/readme/expression_spec.rb +11 -8
- data/spec/integration/readme/function_spec.rb +11 -7
- data/spec/integration/readme/number_spec.rb +9 -8
- data/spec/integration/readme/operator_spec.rb +3 -1
- data/spec/integration/readme/variables_spec.rb +8 -6
- data/spec/lib/danica/common_spec.rb +71 -10
- data/spec/lib/danica/dsl_spec.rb +21 -18
- data/spec/lib/danica/equation_spec.rb +10 -8
- data/spec/lib/danica/expressable_spec.rb +5 -2
- data/spec/lib/danica/expression/gauss_spec.rb +6 -3
- data/spec/lib/danica/expression_spec.rb +48 -26
- data/spec/lib/danica/formatted_spec.rb +34 -13
- data/spec/lib/danica/function/name_spec.rb +3 -1
- data/spec/lib/danica/function_spec.rb +14 -10
- data/spec/lib/danica/operator/addition_spec.rb +16 -15
- data/spec/lib/danica/operator/cos_spec.rb +9 -8
- data/spec/lib/danica/operator/division_spec.rb +18 -17
- data/spec/lib/danica/operator/exponential_spec.rb +9 -8
- data/spec/lib/danica/operator/multiplication_spec.rb +16 -15
- data/spec/lib/danica/operator/power_spec.rb +17 -16
- data/spec/lib/danica/operator/sin_spec.rb +9 -8
- data/spec/lib/danica/operator/squared_root_spec.rb +9 -8
- data/spec/lib/danica/operator_spec.rb +13 -4
- data/spec/lib/danica/variables_holder/store_spec.rb +19 -13
- data/spec/lib/danica/variables_holder_spec.rb +76 -59
- data/spec/lib/danica/wrapper/constant_spec.rb +9 -2
- data/spec/lib/danica/wrapper/group_spec.rb +4 -1
- data/spec/lib/danica/wrapper/negative_spec.rb +4 -1
- data/spec/lib/danica/wrapper/number_spec.rb +8 -3
- data/spec/lib/danica/wrapper/plus_minus_spec.rb +4 -1
- data/spec/lib/danica/wrapper/variable_spec.rb +6 -3
- data/spec/lib/danica/wrapper_spec.rb +14 -12
- data/spec/lib/danica_spec.rb +6 -5
- data/spec/spec_helper.rb +3 -2
- data/spec/support/models/expression/baskara.rb +3 -3
- data/spec/support/models/expression/parabole.rb +2 -0
- data/spec/support/models/expression/quadratic_sum.rb +3 -1
- data/spec/support/models/expression/spatial.rb +2 -1
- data/spec/support/models/function/my_function.rb +3 -1
- data/spec/support/models/function/parabole.rb +1 -1
- data/spec/support/models/function/quadratic_sum.rb +2 -0
- data/spec/support/models/function/spatial.rb +2 -0
- data/spec/support/models/operator/inverse.rb +3 -1
- data/spec/support/models/operator/my_operator.rb +3 -1
- data/spec/support/models/variables_holder/dummy.rb +3 -1
- data/spec/support/shared_contexts/common.rb +4 -2
- data/spec/support/shared_examples/base_operations.rb +7 -4
- data/spec/support/shared_examples/common.rb +3 -1
- data/spec/support/shared_examples/operator/chained.rb +12 -6
- data/spec/support/shared_examples/operator/dual_term.rb +9 -8
- data/spec/support/shared_examples/operator/single_input.rb +7 -2
- data/spec/support/shared_examples/variable.rb +8 -4
- metadata +158 -36
- data/spec/integration/addition_spec.rb +0 -28
- data/spec/integration/formatted_spec.rb +0 -75
- data/spec/integration/readme/formatting_spec.rb +0 -34
@@ -1,16 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Wrapper::Number do
|
4
|
-
let(:number) do
|
5
|
-
Danica::Wrapper::Number.new(3)
|
6
|
-
end
|
7
|
-
|
8
6
|
subject do
|
9
7
|
Danica::DSL.build do
|
10
8
|
number(3)
|
11
9
|
end
|
12
10
|
end
|
13
11
|
|
12
|
+
let(:number) do
|
13
|
+
described_class.new(3)
|
14
|
+
end
|
15
|
+
|
14
16
|
it do
|
15
17
|
expect(subject).to eq(number)
|
16
18
|
end
|
@@ -25,10 +27,10 @@ describe Danica::Wrapper::Number do
|
|
25
27
|
let(:expected) do
|
26
28
|
Danica::Operator::Addition.new(
|
27
29
|
Danica::Operator::Power.new(
|
28
|
-
Danica::Wrapper::Variable.new(:x),
|
29
|
-
|
30
|
+
Danica::Wrapper::Variable.new(:x),
|
31
|
+
described_class.new(2)
|
30
32
|
),
|
31
|
-
|
33
|
+
described_class.new(3)
|
32
34
|
)
|
33
35
|
end
|
34
36
|
|
@@ -37,4 +39,3 @@ describe Danica::Wrapper::Number do
|
|
37
39
|
end
|
38
40
|
end
|
39
41
|
end
|
40
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe MyOperator do
|
@@ -17,7 +19,7 @@ describe MyOperator do
|
|
17
19
|
subject { described_class.new(x: 2) }
|
18
20
|
|
19
21
|
it 'returns the result of the operation' do
|
20
|
-
expect(subject.to_f).to eq(2
|
22
|
+
expect(subject.to_f).to eq(2**Math::PI)
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Wrapper::Variable do
|
4
6
|
describe '#to_tex' do
|
5
7
|
context 'when initializing with the name' do
|
6
8
|
subject do
|
7
|
-
|
9
|
+
described_class.new(:x)
|
8
10
|
end
|
9
11
|
|
10
12
|
it do
|
@@ -14,7 +16,7 @@ describe Danica::Wrapper::Variable do
|
|
14
16
|
|
15
17
|
context 'when initializing with a hash' do
|
16
18
|
subject do
|
17
|
-
|
19
|
+
described_class.new(name: :x)
|
18
20
|
end
|
19
21
|
|
20
22
|
it do
|
@@ -102,17 +104,17 @@ describe Danica::Wrapper::Variable do
|
|
102
104
|
describe 'automatic wrapp' do
|
103
105
|
let(:sum) do
|
104
106
|
Danica::DSL.build do
|
105
|
-
power(:x,
|
107
|
+
power(:x, name: :y) + :z
|
106
108
|
end
|
107
109
|
end
|
108
110
|
|
109
111
|
let(:expected) do
|
110
112
|
Danica::Operator::Addition.new(
|
111
113
|
Danica::Operator::Power.new(
|
112
|
-
|
113
|
-
|
114
|
+
described_class.new(:x),
|
115
|
+
described_class.new(:y)
|
114
116
|
),
|
115
|
-
|
117
|
+
described_class.new(:z)
|
116
118
|
)
|
117
119
|
end
|
118
120
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
module Danica
|
@@ -17,7 +19,7 @@ module Danica
|
|
17
19
|
class Dummy2
|
18
20
|
include Common
|
19
21
|
|
20
|
-
def to(format, **
|
22
|
+
def to(format, **_options)
|
21
23
|
"formatted: #{format}"
|
22
24
|
end
|
23
25
|
end
|
@@ -25,8 +27,10 @@ module Danica
|
|
25
27
|
end
|
26
28
|
|
27
29
|
describe Danica::Common do
|
28
|
-
let(:clazz) { described_class::Dummy }
|
29
30
|
subject { clazz.new }
|
31
|
+
|
32
|
+
let(:clazz) { described_class::Dummy }
|
33
|
+
|
30
34
|
it_behaves_like 'an object that respond to basic_methods'
|
31
35
|
|
32
36
|
describe '#to_f' do
|
@@ -44,31 +48,36 @@ describe Danica::Common do
|
|
44
48
|
expect(subject.to(:tex)).to eq('tex')
|
45
49
|
end
|
46
50
|
end
|
51
|
+
|
47
52
|
context "when requesting 'tex'" do
|
48
53
|
it 'has a string for latex' do
|
49
54
|
expect(subject.to('tex')).to eq('tex')
|
50
55
|
end
|
51
56
|
end
|
57
|
+
|
52
58
|
context 'when requesting :gnu' do
|
53
59
|
it 'has a string for gnu' do
|
54
60
|
expect(subject.to(:gnu)).to eq('gnu')
|
55
61
|
end
|
56
62
|
end
|
63
|
+
|
57
64
|
context "when requesting 'gnu'" do
|
58
65
|
it 'has a string for gnu' do
|
59
66
|
expect(subject.to('gnu')).to eq('gnu')
|
60
67
|
end
|
61
68
|
end
|
62
|
-
|
69
|
+
|
70
|
+
context 'when requesting wrong format' do
|
63
71
|
it do
|
64
72
|
expect do
|
65
73
|
subject.to('format')
|
66
74
|
end.to raise_error(Danica::Exception::FormattedNotFound)
|
67
75
|
end
|
68
76
|
end
|
77
|
+
|
69
78
|
context 'when passing options' do
|
70
79
|
it 'passes the options ahead' do
|
71
|
-
expect(subject.to(:gnu,
|
80
|
+
expect(subject.to(:gnu, opt: 1)).to eq('gnu {:opt=>1}')
|
72
81
|
end
|
73
82
|
end
|
74
83
|
end
|
@@ -77,19 +86,71 @@ describe Danica::Common do
|
|
77
86
|
describe '#to_tex' do
|
78
87
|
context 'when defined the #to method' do
|
79
88
|
let(:clazz) { described_class::Dummy2 }
|
89
|
+
|
80
90
|
it 'returns the call of #to(:tex)' do
|
81
91
|
expect(subject.to_tex).to eq('formatted: tex')
|
82
92
|
end
|
83
93
|
end
|
94
|
+
|
95
|
+
context 'when formatted was generated with gnu and with options' do
|
96
|
+
subject { number.gnu(decimals: 3) }
|
97
|
+
|
98
|
+
let(:number) { Danica::Wrapper::Number.new(1.0 / 3) }
|
99
|
+
|
100
|
+
it 'formats with the current options' do
|
101
|
+
expect(subject.to_tex).to eq('0.333')
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'when overwritting options' do
|
105
|
+
it 'formats with the current options' do
|
106
|
+
expect(subject.to_tex(decimals: 4)).to eq('0.3333')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
84
110
|
end
|
85
111
|
|
86
112
|
describe '#to_gnu' do
|
87
113
|
context 'when defined the #to method' do
|
88
114
|
let(:clazz) { described_class::Dummy2 }
|
115
|
+
|
89
116
|
it 'returns the call of #to(:gnu)' do
|
90
117
|
expect(subject.to_gnu).to eq('formatted: gnu')
|
91
118
|
end
|
92
119
|
end
|
120
|
+
|
121
|
+
context 'when formatted was generated with tex and with options' do
|
122
|
+
subject { number.tex(decimals: 3) }
|
123
|
+
|
124
|
+
let(:number) { Danica::Wrapper::Number.new(1.0 / 3) }
|
125
|
+
|
126
|
+
it 'formats with the current options' do
|
127
|
+
expect(subject.to_gnu).to eq('0.333')
|
128
|
+
end
|
129
|
+
|
130
|
+
context 'when overwritting options' do
|
131
|
+
it 'formats with the current options' do
|
132
|
+
expect(subject.to_gnu(decimals: 4)).to eq('0.3333')
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe 'to' do
|
139
|
+
context 'when already formatted with options' do
|
140
|
+
subject { number.tex(decimals: 3) }
|
141
|
+
|
142
|
+
let(:number) { Danica::Wrapper::Number.new(1.0 / 3) }
|
143
|
+
|
144
|
+
it 'uses to with options' do
|
145
|
+
expect(subject.to(:gnu)).to eq('0.333')
|
146
|
+
end
|
147
|
+
|
148
|
+
context 'when calling with options' do
|
149
|
+
it 'uses options' do
|
150
|
+
expect(subject.to(:gnu, decimals: 4)).to eq('0.3333')
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
93
154
|
end
|
94
155
|
|
95
156
|
describe '#tex' do
|
@@ -98,12 +159,12 @@ describe Danica::Common do
|
|
98
159
|
end
|
99
160
|
|
100
161
|
it 'knows how to return a tex string' do
|
101
|
-
expect(subject.tex.to_s).to eq('tex {:
|
162
|
+
expect(subject.tex.to_s).to eq('tex {:format=>:tex}')
|
102
163
|
end
|
103
164
|
|
104
165
|
context 'when passing options' do
|
105
166
|
it 'uses the arguments' do
|
106
|
-
expect(subject.tex(decimals: 3).to_s).to eq('tex {:decimals=>3}')
|
167
|
+
expect(subject.tex(decimals: 3).to_s).to eq('tex {:format=>:tex, :decimals=>3}')
|
107
168
|
end
|
108
169
|
end
|
109
170
|
end
|
@@ -114,23 +175,23 @@ describe Danica::Common do
|
|
114
175
|
end
|
115
176
|
|
116
177
|
it 'knows how to return a gnu string' do
|
117
|
-
expect(subject.gnu.to_s).to eq('gnu {:
|
178
|
+
expect(subject.gnu.to_s).to eq('gnu {:format=>:gnu}')
|
118
179
|
end
|
119
180
|
|
120
181
|
context 'when passing options' do
|
121
182
|
it 'uses the arguments' do
|
122
|
-
expect(subject.gnu(decimals: 3).to_s).to eq('gnu {:decimals=>3}')
|
183
|
+
expect(subject.gnu(decimals: 3).to_s).to eq('gnu {:format=>:gnu, :decimals=>3}')
|
123
184
|
end
|
124
185
|
end
|
125
186
|
end
|
126
187
|
|
127
188
|
describe '#formatted' do
|
128
189
|
it do
|
129
|
-
expect(subject.formatted(:gnu)).to be_a(Danica::Formatted)
|
190
|
+
expect(subject.formatted(format: :gnu)).to be_a(Danica::Formatted)
|
130
191
|
end
|
131
192
|
|
132
193
|
it 'knows how to return to build the string string' do
|
133
|
-
expect(subject.formatted(:gnu, decimals: 3).to_s).to eq('gnu {:decimals=>3}')
|
194
|
+
expect(subject.formatted(format: :gnu, decimals: 3).to_s).to eq('gnu {:format=>:gnu, :decimals=>3}')
|
134
195
|
end
|
135
196
|
end
|
136
197
|
end
|
data/spec/lib/danica/dsl_spec.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
|
5
|
+
shared_examples 'a class with alias to a clazz' do |aliaz, clazz, *variables|
|
4
6
|
it do
|
5
7
|
expect(subject).to respond_to(aliaz)
|
6
8
|
end
|
@@ -10,29 +12,29 @@ shared_context 'a class with alias to a clazz' do |aliaz, clazz, *variables|
|
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
13
|
-
|
15
|
+
shared_examples 'a class with mapped dsl' do
|
14
16
|
{
|
15
|
-
addition:
|
16
|
-
sum:
|
17
|
+
addition: Danica::Operator::Addition,
|
18
|
+
sum: Danica::Operator::Addition,
|
17
19
|
multiplication: Danica::Operator::Multiplication,
|
18
|
-
product:
|
19
|
-
division:
|
20
|
-
power:
|
20
|
+
product: Danica::Operator::Multiplication,
|
21
|
+
division: Danica::Operator::Division,
|
22
|
+
power: Danica::Operator::Power
|
21
23
|
}.each do |aliaz, clazz|
|
22
24
|
it_behaves_like 'a class with alias to a clazz', aliaz, clazz, 2, 3
|
23
25
|
end
|
24
26
|
{
|
25
|
-
squared_root:
|
26
|
-
sqrt:
|
27
|
-
exponential:
|
28
|
-
sin:
|
29
|
-
cos:
|
30
|
-
group:
|
31
|
-
negative:
|
32
|
-
number:
|
33
|
-
num:
|
34
|
-
plus_minus:
|
35
|
-
constant:
|
27
|
+
squared_root: Danica::Operator::SquaredRoot,
|
28
|
+
sqrt: Danica::Operator::SquaredRoot,
|
29
|
+
exponential: Danica::Operator::Exponential,
|
30
|
+
sin: Danica::Operator::Sin,
|
31
|
+
cos: Danica::Operator::Cos,
|
32
|
+
group: Danica::Wrapper::Group,
|
33
|
+
negative: Danica::Wrapper::Negative,
|
34
|
+
number: Danica::Wrapper::Number,
|
35
|
+
num: Danica::Wrapper::Number,
|
36
|
+
plus_minus: Danica::Wrapper::PlusMinus,
|
37
|
+
constant: Danica::Wrapper::Constant
|
36
38
|
}.each do |aliaz, clazz|
|
37
39
|
it_behaves_like 'a class with alias to a clazz', aliaz, clazz, 9
|
38
40
|
end
|
@@ -44,6 +46,7 @@ describe Danica::DSL do
|
|
44
46
|
end
|
45
47
|
|
46
48
|
let(:subject) { described_class::Dummy.new }
|
49
|
+
|
47
50
|
it_behaves_like 'a class with mapped dsl'
|
48
51
|
|
49
52
|
describe '.build' do
|
@@ -1,22 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Equation do
|
6
|
+
subject do
|
7
|
+
clazz.new
|
8
|
+
end
|
9
|
+
|
4
10
|
let(:clazz) do
|
5
11
|
described_class.build(:x, :y) do
|
6
12
|
left { y }
|
7
|
-
right { x
|
13
|
+
right { x**2 }
|
8
14
|
end
|
9
15
|
end
|
10
16
|
|
11
|
-
subject do
|
12
|
-
clazz.new
|
13
|
-
end
|
14
|
-
|
15
17
|
it_behaves_like 'an object that respond to basic_methods'
|
16
18
|
|
17
19
|
describe '.build' do
|
18
20
|
it 'returns a class that is also an equation' do
|
19
|
-
expect(subject).to be_a(
|
21
|
+
expect(subject).to be_a(described_class)
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
@@ -24,12 +26,12 @@ describe Danica::Equation do
|
|
24
26
|
subject do
|
25
27
|
described_class.create(:x, :y) do
|
26
28
|
left { y }
|
27
|
-
right { x
|
29
|
+
right { x**2 }
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
31
33
|
it 'returns a class that is also an equation' do
|
32
|
-
expect(subject).to be_a(
|
34
|
+
expect(subject).to be_a(described_class)
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
class Danica::Expressable::Dummy
|
@@ -9,12 +11,13 @@ class Danica::Expressable::Dummy
|
|
9
11
|
end
|
10
12
|
|
11
13
|
describe Danica::Expressable do
|
12
|
-
let(:clazz) { described_class::Dummy }
|
13
14
|
subject do
|
14
15
|
clazz.create(:x) { x }
|
15
16
|
end
|
16
17
|
|
17
|
-
|
18
|
+
let(:clazz) { described_class::Dummy }
|
19
|
+
|
20
|
+
it_behaves_like 'an object that respond to basic_methods', ignore: %i[valued? container? is_grouped? priority]
|
18
21
|
|
19
22
|
describe '.build' do
|
20
23
|
it 'responds to build' do
|
@@ -1,6 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Expression::Gauss do
|
6
|
+
subject { described_class::Gauss.new(variables) }
|
7
|
+
|
4
8
|
let(:variables) do
|
5
9
|
{
|
6
10
|
x: :x,
|
@@ -9,12 +13,11 @@ describe Danica::Expression::Gauss do
|
|
9
13
|
}
|
10
14
|
end
|
11
15
|
|
12
|
-
subject { described_class::Gauss.new(variables) }
|
13
16
|
it_behaves_like 'an object that respond to basic_methods'
|
14
17
|
|
15
18
|
describe '#to_tex' do
|
16
19
|
context 'when creating the spatial operator for constantly accelerated movement' do
|
17
|
-
let(:expected) { '\frac{1}{\theta \cdot \sqrt{2 \cdot \pi}} \cdot e^{-\frac{\left(x -u\right)^{2}}{2 \cdot \theta^{2}}}'
|
20
|
+
let(:expected) { '\frac{1}{\theta \cdot \sqrt{2 \cdot \pi}} \cdot e^{-\frac{\left(x -u\right)^{2}}{2 \cdot \theta^{2}}}' }
|
18
21
|
|
19
22
|
it 'return the latex format CAM' do
|
20
23
|
expect(subject.to_tex).to eq(expected)
|
@@ -36,7 +39,7 @@ describe Danica::Expression::Gauss do
|
|
36
39
|
subject { described_class::Gauss.new }
|
37
40
|
|
38
41
|
describe '#to_tex' do
|
39
|
-
let(:expected) { '\frac{1}{\sigma \cdot \sqrt{2 \cdot \pi}} \cdot e^{-\frac{\left(x -\mu\right)^{2}}{2 \cdot \sigma^{2}}}'
|
42
|
+
let(:expected) { '\frac{1}{\sigma \cdot \sqrt{2 \cdot \pi}} \cdot e^{-\frac{\left(x -\mu\right)^{2}}{2 \cdot \sigma^{2}}}' }
|
40
43
|
|
41
44
|
it 'rely on default variables definition' do
|
42
45
|
expect(subject.to_tex).to eq(expected)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
shared_examples 'a generically generated expression' do
|
@@ -25,18 +27,20 @@ shared_examples 'a generically generated expression' do
|
|
25
27
|
end
|
26
28
|
|
27
29
|
describe Danica::Expression do
|
28
|
-
|
30
|
+
subject { expression }
|
31
|
+
|
32
|
+
let(:variables) { %i[x y] }
|
29
33
|
let(:expression_class) do
|
30
34
|
described_class.build(*variables) do
|
31
35
|
Danica::Operator::Power.new(x, y)
|
32
36
|
end
|
33
37
|
end
|
34
|
-
subject { expression }
|
35
38
|
|
36
39
|
describe '.build' do
|
37
40
|
let(:expression) do
|
38
41
|
expression_class.new
|
39
42
|
end
|
43
|
+
|
40
44
|
it_behaves_like 'an object with basic operation'
|
41
45
|
it_behaves_like 'an object that respond to basic_methods'
|
42
46
|
it_behaves_like 'a generically generated expression'
|
@@ -84,7 +88,7 @@ describe Danica::Expression do
|
|
84
88
|
it_behaves_like 'an object that respond to basic_methods'
|
85
89
|
|
86
90
|
it 'has the defined variables on class definition' do
|
87
|
-
expect(expression_class.variables_names).to eq([
|
91
|
+
expect(expression_class.variables_names).to eq(%i[x y])
|
88
92
|
end
|
89
93
|
|
90
94
|
it 'has the defined variables' do
|
@@ -114,12 +118,15 @@ describe Danica::Expression do
|
|
114
118
|
Danica::Operator::Power.new(x, y)
|
115
119
|
end
|
116
120
|
end
|
121
|
+
|
117
122
|
it_behaves_like 'an object with basic operation'
|
118
123
|
it_behaves_like 'an object that respond to basic_methods'
|
119
124
|
it_behaves_like 'a generically generated expression'
|
120
125
|
end
|
121
126
|
|
122
127
|
describe 'spatial' do
|
128
|
+
subject { described_class::Spatial.new(variables) }
|
129
|
+
|
123
130
|
let(:variables) do
|
124
131
|
{
|
125
132
|
time: :t,
|
@@ -129,13 +136,12 @@ describe Danica::Expression do
|
|
129
136
|
}
|
130
137
|
end
|
131
138
|
|
132
|
-
subject { described_class::Spatial.new(variables) }
|
133
139
|
it_behaves_like 'an object with basic operation'
|
134
140
|
it_behaves_like 'an object that respond to basic_methods'
|
135
141
|
|
136
142
|
describe '#to_tex' do
|
137
143
|
context 'when creating the spatial operator for constantly accelerated movement' do
|
138
|
-
let(:expected) { 'S_0 + V_0 \cdot t + \frac{a \cdot t^{2}}{2}'
|
144
|
+
let(:expected) { 'S_0 + V_0 \cdot t + \frac{a \cdot t^{2}}{2}' }
|
139
145
|
|
140
146
|
it 'return the latex format CAM' do
|
141
147
|
expect(subject.to_tex).to eq(expected)
|
@@ -145,7 +151,7 @@ describe Danica::Expression do
|
|
145
151
|
|
146
152
|
describe '#to_gnu' do
|
147
153
|
context 'when creating the spatial operator for constantly accelerated movement' do
|
148
|
-
let(:expected) { 'S0 + V0 * t + (a * t**(2))/(2)'
|
154
|
+
let(:expected) { 'S0 + V0 * t + (a * t**(2))/(2)' }
|
149
155
|
|
150
156
|
it 'return the latex format CAM' do
|
151
157
|
expect(subject.to_gnu).to eq(expected)
|
@@ -158,13 +164,14 @@ describe Danica::Expression do
|
|
158
164
|
{
|
159
165
|
time: Danica::Wrapper::Variable.new(name: :t),
|
160
166
|
acceleration: Danica::Wrapper::Variable.new(name: 'a'),
|
161
|
-
initial_space: Danica::Wrapper::Variable.new(
|
162
|
-
initial_velocity: Danica::Wrapper::Variable.new(
|
167
|
+
initial_space: Danica::Wrapper::Variable.new(name: :S0, latex: 'S_0'),
|
168
|
+
initial_velocity: Danica::Wrapper::Variable.new(name: :V0, latex: 'V_0')
|
163
169
|
}
|
164
170
|
end
|
165
171
|
|
166
172
|
context 'when variables are already wrapped with Danica::Wrapper::Variable' do
|
167
173
|
let(:variables) { expected }
|
174
|
+
|
168
175
|
it 'returns a hash with the variabels' do
|
169
176
|
expect(subject.variables_hash).to eq(expected)
|
170
177
|
end
|
@@ -198,10 +205,11 @@ describe Danica::Expression do
|
|
198
205
|
end
|
199
206
|
|
200
207
|
context 'when initializing with array' do
|
201
|
-
context '
|
202
|
-
let(:variables) { [ :t, 'a', {name: :S0, latex: 'S_0'}, { name: :V0, latex: 'V_0' } ] }
|
208
|
+
context 'when variables contain hashes' do
|
203
209
|
subject { described_class::Spatial.new(variables) }
|
204
210
|
|
211
|
+
let(:variables) { [:t, 'a', { name: :S0, latex: 'S_0' }, { name: :V0, latex: 'V_0' }] }
|
212
|
+
|
205
213
|
it 'returns a hash with the variabels' do
|
206
214
|
expect(subject.variables_hash).to eq(expected)
|
207
215
|
end
|
@@ -209,21 +217,23 @@ describe Danica::Expression do
|
|
209
217
|
end
|
210
218
|
|
211
219
|
context 'when initializing with sequence' do
|
212
|
-
context '
|
213
|
-
let(:variables) { [ :t, 'a', {name: :S0, latex: 'S_0'}, { name: :V0, latex: 'V_0' } ] }
|
220
|
+
context 'when variables contain hashes' do
|
214
221
|
subject { described_class::Spatial.new(*variables, {}) }
|
215
222
|
|
223
|
+
let(:variables) { [:t, 'a', { name: :S0, latex: 'S_0' }, { name: :V0, latex: 'V_0' }] }
|
224
|
+
|
216
225
|
it 'returns a hash with the variabels' do
|
217
226
|
expect(subject.variables_hash).to eq(expected)
|
218
227
|
end
|
219
228
|
end
|
220
229
|
end
|
221
230
|
|
222
|
-
context 'when initializing with variables
|
223
|
-
context '
|
224
|
-
let(:variables) { [ :t, 'a', {name: :S0, latex: 'S_0'}, { name: :V0, latex: 'V_0' } ] }
|
231
|
+
context 'when initializing with variables hash' do
|
232
|
+
context 'when variables contain hashes' do
|
225
233
|
subject { described_class::Spatial.new(variables: variables) }
|
226
234
|
|
235
|
+
let(:variables) { [:t, 'a', { name: :S0, latex: 'S_0' }, { name: :V0, latex: 'V_0' }] }
|
236
|
+
|
227
237
|
it 'returns a hash with the variabels' do
|
228
238
|
expect(subject.variables_hash).to eq(expected)
|
229
239
|
end
|
@@ -234,7 +244,9 @@ describe Danica::Expression do
|
|
234
244
|
describe '#variables' do
|
235
245
|
context 'when initialized with an array of variables' do
|
236
246
|
subject { described_class::Spatial.new(variables: variables.values) }
|
247
|
+
|
237
248
|
let(:expected) { variables.values.map { |v| Danica::Wrapper::Variable.new(v.is_a?(Hash) ? v : { name: v }) } }
|
249
|
+
|
238
250
|
it do
|
239
251
|
expect(subject.variables.compact).to eq(expected)
|
240
252
|
end
|
@@ -242,6 +254,7 @@ describe Danica::Expression do
|
|
242
254
|
|
243
255
|
context 'when not initializing all variables' do
|
244
256
|
subject { described_class::Spatial.new }
|
257
|
+
|
245
258
|
let(:time) { Danica::Wrapper::Variable.new(name: :t) }
|
246
259
|
|
247
260
|
context 'when initialized with an empty variable set' do
|
@@ -255,25 +268,32 @@ describe Danica::Expression do
|
|
255
268
|
subject.time = time
|
256
269
|
end
|
257
270
|
|
258
|
-
|
259
|
-
|
271
|
+
let(:expected_variables) do
|
272
|
+
[
|
260
273
|
time,
|
261
274
|
Danica::Wrapper::Variable.new(name: :acceleration),
|
262
275
|
Danica::Wrapper::Variable.new(name: :initial_space),
|
263
276
|
Danica::Wrapper::Variable.new(name: :initial_velocity)
|
264
|
-
]
|
277
|
+
]
|
278
|
+
end
|
279
|
+
|
280
|
+
it 'returns the list of variables merged default and new variables' do
|
281
|
+
expect(subject.variables.compact).to eq(expected_variables)
|
265
282
|
end
|
266
283
|
end
|
267
284
|
|
268
285
|
context 'when initializing with a variable set' do
|
269
|
-
|
270
|
-
|
286
|
+
subject { described_class::Spatial.new(*names) }
|
287
|
+
|
288
|
+
let(:names) { %i[t a s0 v0] }
|
271
289
|
|
272
290
|
it 'returns the variables given oin initialization' do
|
273
291
|
expect(subject.variables.map(&:name)).to eq(names)
|
274
292
|
end
|
275
293
|
|
276
294
|
context 'when initializing variables with a hash out of order' do
|
295
|
+
subject { described_class::Spatial.new variables }
|
296
|
+
|
277
297
|
let(:variables) do
|
278
298
|
{
|
279
299
|
initial_velocity: :v0,
|
@@ -282,7 +302,6 @@ describe Danica::Expression do
|
|
282
302
|
time: :t
|
283
303
|
}
|
284
304
|
end
|
285
|
-
subject { described_class::Spatial.new variables }
|
286
305
|
|
287
306
|
it 'returns the variables given on initialization' do
|
288
307
|
expect(subject.variables.map(&:name)).to eq(names)
|
@@ -294,13 +313,15 @@ describe Danica::Expression do
|
|
294
313
|
|
295
314
|
describe '#calculate' do
|
296
315
|
context 'when all variables have value' do
|
316
|
+
subject { described_class::Spatial.new(time, acceleration, initial_space, initial_velocity) }
|
317
|
+
|
297
318
|
let(:time_value) { 2 }
|
298
319
|
let(:time) { time_value }
|
299
320
|
let(:acceleration) { 3 }
|
300
321
|
let(:initial_space) { 1 }
|
301
322
|
let(:initial_velocity) { 1 }
|
302
|
-
|
303
|
-
let(:expected) { initial_space + initial_velocity * time_value + acceleration * (time_value
|
323
|
+
|
324
|
+
let(:expected) { initial_space + initial_velocity * time_value + acceleration * (time_value**2) / 2.0 }
|
304
325
|
|
305
326
|
it 'retuirns the calculated value' do
|
306
327
|
expect(subject.calculate).to eq(expected)
|
@@ -313,7 +334,7 @@ describe Danica::Expression do
|
|
313
334
|
expect { subject.calculate }.to raise_error(Danica::Exception::NotDefined)
|
314
335
|
end
|
315
336
|
|
316
|
-
context '
|
337
|
+
context 'when calling calculate with a value for the variables' do
|
317
338
|
it 'calculate using the given value' do
|
318
339
|
expect(subject.calculate(time_value)).to eq(expected)
|
319
340
|
end
|
@@ -344,10 +365,11 @@ describe Danica::Expression do
|
|
344
365
|
describe 'baskara' do
|
345
366
|
context 'when using the default value for variables' do
|
346
367
|
subject { described_class::Baskara.new }
|
368
|
+
|
347
369
|
it_behaves_like 'an object that respond to basic_methods'
|
348
370
|
|
349
371
|
describe '#to_tex' do
|
350
|
-
let(:expected) { '\frac{-b \pm \sqrt{b^{2} -4 \cdot a \cdot c}}{2 \cdot a}'
|
372
|
+
let(:expected) { '\frac{-b \pm \sqrt{b^{2} -4 \cdot a \cdot c}}{2 \cdot a}' }
|
351
373
|
|
352
374
|
it 'return the latex format CAM' do
|
353
375
|
expect(subject.to_tex).to eq(expected)
|
@@ -355,7 +377,7 @@ describe Danica::Expression do
|
|
355
377
|
end
|
356
378
|
|
357
379
|
describe '#to_gnu' do
|
358
|
-
let(:expected) { '(-b + sqrt(b**(2) -4 * a * c))/(2 * a)'
|
380
|
+
let(:expected) { '(-b + sqrt(b**(2) -4 * a * c))/(2 * a)' }
|
359
381
|
|
360
382
|
it 'return the gnu format CAM' do
|
361
383
|
expect(subject.to_gnu).to eq(expected)
|