danica 2.7.2 → 2.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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)
|