danica 2.7.1 → 2.7.6
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 +9 -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 +16 -9
- data/docker-compose.yml +14 -9
- data/lib/danica.rb +3 -1
- data/lib/danica/base_operations.rb +15 -7
- data/lib/danica/builder.rb +2 -0
- data/lib/danica/common.rb +24 -16
- data/lib/danica/dsl.rb +15 -9
- data/lib/danica/dsl/builder.rb +40 -0
- data/lib/danica/equation.rb +3 -3
- data/lib/danica/equation/builder.rb +2 -0
- data/lib/danica/exception.rb +14 -2
- data/lib/danica/expressable.rb +20 -16
- data/lib/danica/expression.rb +4 -2
- data/lib/danica/expression/gauss.rb +5 -5
- data/lib/danica/formatted.rb +34 -11
- 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 -7
- data/lib/danica/operator/chained.rb +4 -8
- data/lib/danica/operator/cos.rb +2 -1
- data/lib/danica/operator/division.rb +3 -2
- data/lib/danica/operator/exponential.rb +2 -1
- data/lib/danica/operator/functional.rb +3 -2
- data/lib/danica/operator/multiplication.rb +5 -7
- 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 +27 -24
- 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 +17 -9
- data/lib/danica/wrapper/constant.rb +10 -14
- data/lib/danica/wrapper/container.rb +4 -4
- 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/global/danica/operator/multiplication_spec.rb +106 -0
- data/spec/integration/{power_spec.rb → global/danica/operator/power_spec.rb} +4 -2
- data/spec/integration/global/danica/wrapper/negative_spec.rb +56 -0
- 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 +79 -8
- 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 +57 -24
- 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 +18 -21
- 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 +19 -20
- 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 +22 -16
- 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 +115 -30
- data/spec/integration/addition_spec.rb +0 -28
- data/spec/integration/multiplication_spec.rb +0 -44
- data/spec/integration/negative_spec.rb +0 -25
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Function::Name do
|
4
|
-
let(:x) {
|
6
|
+
let(:x) { Danica::Wrapper::Variable.new(name: :x, latex: '\mu', gnuplot: 'u') }
|
5
7
|
let(:subject) { described_class.new(name: :f, variables: [x]) }
|
6
8
|
|
7
9
|
it_behaves_like 'an object that respond to basic_methods'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
shared_examples 'a generically generated function' do
|
@@ -28,8 +30,9 @@ end
|
|
28
30
|
|
29
31
|
describe Danica::Function do
|
30
32
|
subject { function }
|
33
|
+
|
31
34
|
let(:function) { function_class.new }
|
32
|
-
let(:variables) { %i
|
35
|
+
let(:variables) { %i[x y] }
|
33
36
|
let(:function_class) do
|
34
37
|
described_class.build(*variables) do
|
35
38
|
Danica::Operator::Power.new(x, y)
|
@@ -37,12 +40,13 @@ describe Danica::Function do
|
|
37
40
|
end
|
38
41
|
|
39
42
|
describe '.for' do
|
40
|
-
let(:expression_class) { Danica::Expression::Gauss }
|
41
|
-
let(:expression) { expression_class.new }
|
42
43
|
subject do
|
43
44
|
described_class.for(expression_class).new
|
44
45
|
end
|
45
46
|
|
47
|
+
let(:expression_class) { Danica::Expression::Gauss }
|
48
|
+
let(:expression) { expression_class.new }
|
49
|
+
|
46
50
|
it 'returns a function' do
|
47
51
|
expect(subject).to be_a(described_class)
|
48
52
|
end
|
@@ -111,7 +115,7 @@ describe Danica::Function do
|
|
111
115
|
let(:function_class) { Danica::Function::SaddleParabole }
|
112
116
|
|
113
117
|
it 'has the defined variables on class definition' do
|
114
|
-
expect(function_class.variables_names).to eq([
|
118
|
+
expect(function_class.variables_names).to eq(%i[x y])
|
115
119
|
end
|
116
120
|
|
117
121
|
it 'has the defined variables' do
|
@@ -143,6 +147,7 @@ describe Danica::Function do
|
|
143
147
|
f.name = :f
|
144
148
|
end
|
145
149
|
end
|
150
|
+
|
146
151
|
it_behaves_like 'a generically generated function'
|
147
152
|
end
|
148
153
|
|
@@ -157,9 +162,8 @@ describe Danica::Function do
|
|
157
162
|
|
158
163
|
context 'when changing the function variables' do
|
159
164
|
it 'changes the name variables' do
|
160
|
-
expect
|
161
|
-
function.
|
162
|
-
end.to change { function.name.variables.map(&:content) }
|
165
|
+
expect { function.x = 2 }
|
166
|
+
.to(change { function.name.variables.map(&:content) })
|
163
167
|
end
|
164
168
|
end
|
165
169
|
end
|
@@ -174,7 +178,7 @@ describe Danica::Function do
|
|
174
178
|
expect(function.to_tex).to eq('f(x, y) = x^{y}')
|
175
179
|
end
|
176
180
|
|
177
|
-
context '
|
181
|
+
context 'when one of the variables is changed' do
|
178
182
|
it 'uses the new variable value' do
|
179
183
|
expect do
|
180
184
|
function.y = 2
|
@@ -192,7 +196,7 @@ describe Danica::Function do
|
|
192
196
|
expect(function.to_tex).to eq('f(y) = \pi^{y}')
|
193
197
|
end
|
194
198
|
|
195
|
-
context '
|
199
|
+
context 'when name is in the hash' do
|
196
200
|
let(:function) do
|
197
201
|
function_class.new(name: :f, x: { latex: '\pi', gnuplot: 'pi', value: 3.14 })
|
198
202
|
end
|
@@ -244,7 +248,7 @@ describe Danica::Function do
|
|
244
248
|
expect(function.to_gnu).to eq('f(y) = pi**(y)')
|
245
249
|
end
|
246
250
|
|
247
|
-
context '
|
251
|
+
context 'when name is in the hash' do
|
248
252
|
let(:function) do
|
249
253
|
function_class.new(name: :f, x: { latex: '\pi', gnuplot: 'pi', value: 3.14 })
|
250
254
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Operator::Addition do
|
@@ -11,34 +13,29 @@ describe Danica::Operator::Addition do
|
|
11
13
|
|
12
14
|
it_behaves_like 'an object that respond to basic_methods'
|
13
15
|
|
14
|
-
it_behaves_like 'an object with basic operation', ignore: %i
|
16
|
+
it_behaves_like 'an object with basic operation', ignore: %i[+ -]
|
15
17
|
it_behaves_like 'an object with + operation' do
|
16
|
-
let(:subject_included) { 10 }
|
17
|
-
|
18
18
|
context 'when other is also a addition' do
|
19
19
|
let(:other) { described_class.new(200, 5) }
|
20
20
|
|
21
21
|
it 'includes the addition parcels' do
|
22
|
-
expect(result).to
|
22
|
+
expect(result.to_gnu).to eq('10 + 2 + 200 + 5')
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
|
-
it_behaves_like 'an object with - operation'
|
27
|
-
let(:subject_included) { 10 }
|
28
|
-
end
|
26
|
+
it_behaves_like 'an object with - operation'
|
29
27
|
|
30
|
-
it_behaves_like 'a operator that joins many variables with same operation',
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
}
|
28
|
+
it_behaves_like 'a operator that joins many variables with same operation',
|
29
|
+
calculated: 10,
|
30
|
+
numeric_variables: [1.5, 3.0, 3.5],
|
31
|
+
tex: {
|
32
|
+
string_expected: 'X1 + X2 + X3 + X4',
|
33
|
+
integer_expected: '1.5 + 3 + X3 + X4',
|
34
|
+
float_expected: '1.5 + 3 + 3.5 + X4'
|
35
|
+
},
|
36
|
+
gnu: {
|
37
|
+
string_expected: 'X1 + X2 + X3 + X4',
|
38
|
+
integer_expected: '1.5 + 3 + X3 + X4',
|
39
|
+
float_expected: '1.5 + 3 + 3.5 + X4'
|
40
|
+
}
|
44
41
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Operator::Cos do
|
@@ -6,12 +8,11 @@ describe Danica::Operator::Cos do
|
|
6
8
|
it_behaves_like 'an object that respond to basic_methods'
|
7
9
|
it_behaves_like 'an object with basic operation'
|
8
10
|
|
9
|
-
it_behaves_like 'a operator with a single input value',
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
}
|
11
|
+
it_behaves_like 'a operator with a single input value',
|
12
|
+
variable_value: Math::PI,
|
13
|
+
expected_number: -1.0,
|
14
|
+
expected_number_tex: 'cos(3.141592653589793)',
|
15
|
+
expected_number_gnu: 'cos(3.141592653589793)',
|
16
|
+
expected_tex: 'cos(X)',
|
17
|
+
expected_gnu: 'cos(X)'
|
17
18
|
end
|
@@ -1,9 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Operator::Division do
|
4
|
-
let(:variables) { [2, 4] }
|
5
6
|
subject { described_class.new(*variables) }
|
6
7
|
|
8
|
+
let(:variables) { [2, 4] }
|
9
|
+
|
7
10
|
describe '#numerator' do
|
8
11
|
it 'returns the numerator' do
|
9
12
|
expect(subject.numerator).to eq(Danica::Wrapper::Number.new(2))
|
@@ -19,25 +22,24 @@ describe Danica::Operator::Division do
|
|
19
22
|
it_behaves_like 'an object that respond to basic_methods'
|
20
23
|
it_behaves_like 'an object with basic operation'
|
21
24
|
|
22
|
-
it_behaves_like 'a operator that has two terms', :division,
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
}
|
25
|
+
it_behaves_like 'a operator that has two terms', :division,
|
26
|
+
values: [2, 4],
|
27
|
+
calculated: 1.0 / 2.0,
|
28
|
+
to_tex: {
|
29
|
+
string_expected: '\frac{X1}{X2}',
|
30
|
+
numeric_string_expected: '\frac{2}{4}',
|
31
|
+
partial_string_expected: '\frac{2}{X2}'
|
32
|
+
},
|
33
|
+
to_gnu: {
|
34
|
+
string_expected: '(X1)/(X2)',
|
35
|
+
numeric_string_expected: '(2)/(4)',
|
36
|
+
partial_string_expected: '(2)/(X2)'
|
37
|
+
}
|
36
38
|
|
37
39
|
describe 'more complex division' do
|
38
40
|
describe 'of two additions' do
|
39
41
|
subject do
|
40
|
-
|
42
|
+
described_class.new(
|
41
43
|
Danica::Operator::Addition.new(2, :x),
|
42
44
|
Danica::Operator::Addition.new(3, :y)
|
43
45
|
)
|
@@ -55,4 +57,3 @@ describe Danica::Operator::Division do
|
|
55
57
|
end
|
56
58
|
end
|
57
59
|
end
|
58
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Operator::Exponential do
|
@@ -6,12 +8,11 @@ describe Danica::Operator::Exponential do
|
|
6
8
|
it_behaves_like 'an object that respond to basic_methods'
|
7
9
|
it_behaves_like 'an object with basic operation'
|
8
10
|
|
9
|
-
it_behaves_like 'a operator with a single input value',
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
}
|
11
|
+
it_behaves_like 'a operator with a single input value',
|
12
|
+
variable_value: 2,
|
13
|
+
expected_number: Math.exp(2),
|
14
|
+
expected_number_tex: 'e^{2}',
|
15
|
+
expected_number_gnu: 'exp(2)',
|
16
|
+
expected_tex: 'e^{X}',
|
17
|
+
expected_gnu: 'exp(X)'
|
17
18
|
end
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Operator::Multiplication do
|
4
|
-
subject { described_class.new(2,4) }
|
6
|
+
subject { described_class.new(2, 4) }
|
5
7
|
|
6
8
|
it 'initializes from array' do
|
7
9
|
expect do
|
@@ -12,30 +14,27 @@ describe Danica::Operator::Multiplication do
|
|
12
14
|
it_behaves_like 'an object that respond to basic_methods'
|
13
15
|
|
14
16
|
it_behaves_like 'an object with * operation' do
|
15
|
-
|
16
|
-
|
17
|
-
context 'when other is also a addition' do
|
17
|
+
context 'when other is also a multiplication' do
|
18
18
|
let(:other) { described_class.new(200, 5) }
|
19
19
|
|
20
|
-
it 'includes the addition parcels' do
|
21
|
-
expect(result).to
|
20
|
+
it 'includes the addition parcels in the result' do
|
21
|
+
expect(result.to_gnu).to eq('2 * 4 * 200 * 5')
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
25
|
it_behaves_like 'an object with basic operation', ignore: :*
|
26
26
|
|
27
|
-
it_behaves_like 'a operator that joins many variables with same operation',
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
}
|
27
|
+
it_behaves_like 'a operator that joins many variables with same operation',
|
28
|
+
calculated: 24,
|
29
|
+
numeric_variables: [1.5, 2, 3.5],
|
30
|
+
tex: {
|
31
|
+
string_expected: %w[X1 X2 X3 X4].join(' \cdot '),
|
32
|
+
integer_expected: %w[1.5 2 X3 X4].join(' \cdot '),
|
33
|
+
float_expected: %w[1.5 2 3.5 X4].join(' \cdot ')
|
34
|
+
},
|
35
|
+
gnu: {
|
36
|
+
string_expected: %w[X1 X2 X3 X4].join(' * '),
|
37
|
+
integer_expected: %w[1.5 2 X3 X4].join(' * '),
|
38
|
+
float_expected: %w[1.5 2 3.5 X4].join(' * ')
|
39
|
+
}
|
41
40
|
end
|
@@ -1,25 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Operator::Power do
|
4
|
-
let(:variables) { [2, 4] }
|
5
6
|
subject { described_class.new(*variables) }
|
6
7
|
|
8
|
+
let(:variables) { [2, 4] }
|
9
|
+
|
7
10
|
it_behaves_like 'an object that respond to basic_methods'
|
8
11
|
it_behaves_like 'an object with basic operation'
|
9
12
|
|
10
|
-
it_behaves_like 'a operator that has two terms', :power,
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
}
|
13
|
+
it_behaves_like 'a operator that has two terms', :power,
|
14
|
+
values: [3, 2],
|
15
|
+
calculated: 9.0,
|
16
|
+
to_tex: {
|
17
|
+
string_expected: 'X1^{X2}',
|
18
|
+
numeric_string_expected: '3^{2}',
|
19
|
+
partial_string_expected: '3^{X2}'
|
20
|
+
},
|
21
|
+
to_gnu: {
|
22
|
+
string_expected: 'X1**(X2)',
|
23
|
+
numeric_string_expected: '3**(2)',
|
24
|
+
partial_string_expected: '3**(X2)'
|
25
|
+
}
|
24
26
|
end
|
25
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Operator::Sin do
|
@@ -6,12 +8,11 @@ describe Danica::Operator::Sin do
|
|
6
8
|
it_behaves_like 'an object that respond to basic_methods'
|
7
9
|
it_behaves_like 'an object with basic operation'
|
8
10
|
|
9
|
-
it_behaves_like 'a operator with a single input value',
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
}
|
11
|
+
it_behaves_like 'a operator with a single input value',
|
12
|
+
variable_value: Math::PI / 2.0,
|
13
|
+
expected_number: 1.0,
|
14
|
+
expected_number_tex: 'sin(1.5707963267948966)',
|
15
|
+
expected_number_gnu: 'sin(1.5707963267948966)',
|
16
|
+
expected_tex: 'sin(X)',
|
17
|
+
expected_gnu: 'sin(X)'
|
17
18
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Danica::Operator::SquaredRoot do
|
@@ -6,12 +8,11 @@ describe Danica::Operator::SquaredRoot do
|
|
6
8
|
it_behaves_like 'an object that respond to basic_methods'
|
7
9
|
it_behaves_like 'an object with basic operation'
|
8
10
|
|
9
|
-
it_behaves_like 'a operator with a single input value',
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
}
|
11
|
+
it_behaves_like 'a operator with a single input value',
|
12
|
+
variable_value: 9,
|
13
|
+
expected_number: 3.0,
|
14
|
+
expected_number_tex: '\sqrt{9}',
|
15
|
+
expected_number_gnu: 'sqrt(9)',
|
16
|
+
expected_tex: '\sqrt{X}',
|
17
|
+
expected_gnu: 'sqrt(X)'
|
17
18
|
end
|
@@ -1,31 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
class Danica::Operator::Dummy < Danica::Operator
|
4
6
|
variables :a, :b
|
5
7
|
|
6
|
-
def to(*
|
8
|
+
def to(*_args)
|
7
9
|
a + b
|
8
10
|
end
|
9
11
|
end
|
10
12
|
|
11
13
|
describe Danica::Operator do
|
14
|
+
subject { clazz.new(*variables) }
|
15
|
+
|
12
16
|
let(:variables) { [2, 4] }
|
13
17
|
let(:clazz) { described_class::Dummy }
|
14
|
-
subject { clazz.new(*variables) }
|
15
18
|
|
16
19
|
it_behaves_like 'an object that respond to basic_methods'
|
17
20
|
|
18
21
|
describe 'variables assignment' do
|
19
|
-
it 'assignes
|
22
|
+
it 'assignes first variable' do
|
20
23
|
expect(subject.a).to eq(Danica::Wrapper::Number.new(2))
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'assignes second variable' do
|
21
27
|
expect(subject.b).to eq(Danica::Wrapper::Number.new(4))
|
22
28
|
end
|
23
29
|
|
24
30
|
context 'when initializing with a hash' do
|
25
31
|
let(:variables) { [{ name: :A, value: 2 }, { name: :B, value: 4 }] }
|
26
32
|
|
27
|
-
it 'assignes
|
33
|
+
it 'assignes first variable' do
|
28
34
|
expect(subject.a).to eq(Danica::Wrapper::Variable.new(name: :A, value: 2))
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'assignes second variable' do
|
29
38
|
expect(subject.b).to eq(Danica::Wrapper::Variable.new(name: :B, value: 4))
|
30
39
|
end
|
31
40
|
end
|