danica 2.7.1 → 2.7.6
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 +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,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Container
|
3
5
|
include Common
|
4
6
|
attr_accessor :content
|
5
7
|
|
6
8
|
delegate :to_f, :contentd?, :to, :to_tex, :to_gnu, :priority, :grouped?,
|
7
|
-
:signaled?, :constant?, :valued?, :*, :+, :-, :/, :**,
|
9
|
+
:signaled?, :constant?, :valued?, :*, :+, :-, :/, :**, :-@,
|
8
10
|
:variables, :variable?, to: :content
|
9
11
|
|
10
12
|
default_value :container?, true
|
@@ -15,10 +17,8 @@ module Danica
|
|
15
17
|
|
16
18
|
def ==(other)
|
17
19
|
return content == other unless other.is_a?(self.class)
|
20
|
+
|
18
21
|
content == other.content
|
19
22
|
end
|
20
23
|
end
|
21
24
|
end
|
22
|
-
|
23
|
-
|
24
|
-
|
data/lib/danica/wrapper/group.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Group
|
3
5
|
include Common
|
@@ -24,9 +26,8 @@ module Danica
|
|
24
26
|
|
25
27
|
def ==(other)
|
26
28
|
return value == other unless other.is_a?(self.class)
|
29
|
+
|
27
30
|
value == other.value
|
28
31
|
end
|
29
32
|
end
|
30
33
|
end
|
31
|
-
|
32
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Negative
|
3
5
|
include BaseOperations
|
@@ -25,8 +27,8 @@ module Danica
|
|
25
27
|
|
26
28
|
def ==(other)
|
27
29
|
return false unless other.class == self.class
|
30
|
+
|
28
31
|
value == other.value
|
29
32
|
end
|
30
33
|
end
|
31
34
|
end
|
32
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Number
|
3
5
|
include BaseOperations
|
@@ -13,9 +15,10 @@ module Danica
|
|
13
15
|
@value = value
|
14
16
|
end
|
15
17
|
|
16
|
-
def to(
|
18
|
+
def to(_format, decimals: nil, **_options)
|
17
19
|
return value.to_i.to_s if value.to_i == value
|
18
|
-
return ("%.#{decimals}f"
|
20
|
+
return format("%.#{decimals}f", value).to_f.to_s if decimals
|
21
|
+
|
19
22
|
value.to_s
|
20
23
|
end
|
21
24
|
|
@@ -29,8 +32,8 @@ module Danica
|
|
29
32
|
|
30
33
|
def ==(other)
|
31
34
|
return false unless other.class == self.class
|
35
|
+
|
32
36
|
value == other.value
|
33
37
|
end
|
34
38
|
end
|
35
39
|
end
|
36
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::PlusMinus
|
3
5
|
include BaseOperations
|
@@ -29,8 +31,8 @@ module Danica
|
|
29
31
|
|
30
32
|
def ==(other)
|
31
33
|
return false unless other.class == self.class
|
34
|
+
|
32
35
|
value == other.value
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|
36
|
-
|
@@ -1,9 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Variable
|
3
5
|
include BaseOperations
|
4
6
|
include Common
|
5
7
|
|
6
|
-
attr_accessor :
|
8
|
+
attr_accessor :name, :latex, :gnuplot
|
9
|
+
attr_reader :value
|
7
10
|
|
8
11
|
default_value :priority, 10
|
9
12
|
default_value :is_grouped?, false
|
@@ -11,10 +14,10 @@ module Danica
|
|
11
14
|
|
12
15
|
def initialize(*args)
|
13
16
|
attrs = args.extract_options!
|
14
|
-
attrs = args.as_hash(%i
|
17
|
+
attrs = args.as_hash(%i[name value latex gnuplot]).merge(attrs)
|
15
18
|
|
16
19
|
attrs.each do |key, value|
|
17
|
-
|
20
|
+
public_send("#{key}=", value)
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
@@ -24,19 +27,22 @@ module Danica
|
|
24
27
|
|
25
28
|
def ==(other)
|
26
29
|
return false unless other.class == self.class
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
30
|
+
|
31
|
+
other.value == value &&
|
32
|
+
other.name == name &&
|
33
|
+
other.latex == latex &&
|
34
|
+
other.gnuplot == gnuplot
|
31
35
|
end
|
32
36
|
|
33
37
|
def to_tex(**options)
|
34
38
|
return value.to_tex(options) if value
|
39
|
+
|
35
40
|
(latex || name).to_s
|
36
41
|
end
|
37
42
|
|
38
43
|
def to_gnu(**options)
|
39
44
|
return value.to_gnu(options) if value
|
45
|
+
|
40
46
|
(gnuplot || name).to_s
|
41
47
|
end
|
42
48
|
|
@@ -45,4 +51,3 @@ module Danica
|
|
45
51
|
end
|
46
52
|
end
|
47
53
|
end
|
48
|
-
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
DIFF_LIST=$(git diff --name-only $CIRCLE_SHA1 $(git merge-base $CIRCLE_SHA1 origin/master) | grep "^lib/")
|
4
|
+
|
5
|
+
if [ ! -z "$DIFF_LIST" ]; then
|
6
|
+
mkdir -p tmp/rubycritic/compare
|
7
|
+
bundle exec rubycritic --format console --branch origin/master -t 0 --maximum-decrease 1 $DIFF_LIST
|
8
|
+
else
|
9
|
+
echo "No changes detected. Skipping rubycritic..."
|
10
|
+
fi
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Danica::Formatted do
|
6
|
+
describe 'integration of formatted objects' do
|
7
|
+
subject do
|
8
|
+
variable.tex
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:variable) { Danica.build(:v) { v } }
|
12
|
+
|
13
|
+
context 'when interacting with a multiplication' do
|
14
|
+
let(:other) do
|
15
|
+
Danica.build(:x, :y) { x * y }
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when multipling another multiplication' do
|
19
|
+
let(:result) { subject * other }
|
20
|
+
|
21
|
+
it do
|
22
|
+
expect(result).to be_a(described_class)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'knows how to convert it to string' do
|
26
|
+
expect(result.to_s).to eq('v \\cdot x \\cdot y')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when multiplicated by another multiplication' do
|
31
|
+
let(:result) { other * subject }
|
32
|
+
|
33
|
+
it do
|
34
|
+
expect(result).to be_a(described_class)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'knows how to convert it to string' do
|
38
|
+
expect(result.to_s).to eq('x \\cdot y \\cdot v')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when interacting with a sum' do
|
44
|
+
let(:other) do
|
45
|
+
Danica.build(:x, :y) { x + y }
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when summing another sum' do
|
49
|
+
let(:result) { subject + other }
|
50
|
+
|
51
|
+
it do
|
52
|
+
expect(result).to be_a(described_class)
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'knows how to convert it to string' do
|
56
|
+
expect(result.to_s).to eq('v + x + y')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'when added by another sum' do
|
61
|
+
let(:result) { other + subject }
|
62
|
+
|
63
|
+
it do
|
64
|
+
expect(result).to be_a(described_class)
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'knows how to convert it to string' do
|
68
|
+
expect(result.to_s).to eq('x + y + v')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when operating multiplication and subtraction all toguether' do
|
74
|
+
let(:variable) { Danica::Wrapper::Variable.new(:v) }
|
75
|
+
let(:x) { Danica::Wrapper::Variable.new(:x) }
|
76
|
+
let(:result) { x * -subject }
|
77
|
+
|
78
|
+
it do
|
79
|
+
expect(result).to be_a(described_class)
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'knows how to convert it to string' do
|
83
|
+
expect(result.to_s).to eq('x \cdot \left(-v\right)')
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Danica::Operator::Addition do
|
6
|
+
describe 'integration' do
|
7
|
+
describe 'with negative and positivenegative (+/-) numbers' do
|
8
|
+
subject do
|
9
|
+
described_class.new(
|
10
|
+
Danica::Wrapper::Negative.new(1),
|
11
|
+
2,
|
12
|
+
-3,
|
13
|
+
4,
|
14
|
+
Danica::Wrapper::PlusMinus.new(5),
|
15
|
+
Danica::Wrapper::Number.new(-6)
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#to_gnu' do
|
20
|
+
it 'returns the correct string' do
|
21
|
+
expect(subject.to_gnu).to eq('-1 + 2 -3 + 4 + 5 -6')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#to_tex' do
|
26
|
+
it 'returns the correct string' do
|
27
|
+
expect(subject.to_tex).to eq('-1 + 2 -3 + 4 \pm 5 -6')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Danica::Operator::Multiplication do
|
6
|
+
describe 'of number and addition' do
|
7
|
+
subject do
|
8
|
+
described_class.new(
|
9
|
+
3, Danica::Operator::Addition.new(2, 4)
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#to_gnu' do
|
14
|
+
it 'returns the correct string' do
|
15
|
+
expect(subject.to_gnu).to eq('3 * (2 + 4)')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#to_gnu' do
|
20
|
+
it 'returns the correct string' do
|
21
|
+
expect(subject.to_tex).to eq('3 \cdot \left(2 + 4\right)')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'of additions' do
|
27
|
+
subject do
|
28
|
+
described_class.new(
|
29
|
+
Danica::Operator::Addition.new(1, 2),
|
30
|
+
Danica::Operator::Addition.new(3, 4)
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#to_gnu' do
|
35
|
+
it 'returns the correct string' do
|
36
|
+
expect(subject.to_gnu).to eq('(1 + 2) * (3 + 4)')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#to_tex' do
|
41
|
+
it 'returns the correct string' do
|
42
|
+
expect(subject.to_tex).to eq('\left(1 + 2\right) \cdot \left(3 + 4\right)')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe 'when calling * operator' do
|
48
|
+
subject do
|
49
|
+
described_class.new(:x, :y)
|
50
|
+
end
|
51
|
+
|
52
|
+
let(:variable) { Danica::Wrapper::Variable.new(:v) }
|
53
|
+
let(:result) { subject * variable }
|
54
|
+
|
55
|
+
it do
|
56
|
+
expect(result).to be_a(described_class)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'knows how to order variables' do
|
60
|
+
expect(result.to_gnu).to eq('x * y * v')
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when called from the other' do
|
64
|
+
let(:result) { variable * subject }
|
65
|
+
|
66
|
+
it do
|
67
|
+
expect(result).to be_a(described_class)
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'knows how to order variables' do
|
71
|
+
expect(result.to_gnu).to eq('v * x * y')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'when multiplicating a negative number' do
|
77
|
+
let(:x) { Danica::Wrapper::Variable.new(:x) }
|
78
|
+
let(:y) { Danica::Wrapper::Variable.new(:y) }
|
79
|
+
let(:negative) { -y }
|
80
|
+
let(:result) { x * negative }
|
81
|
+
|
82
|
+
it do
|
83
|
+
expect(result).to be_a(described_class)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'knows how to order variables' do
|
87
|
+
expect(result.to_gnu).to eq('x * (-y)')
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'when negative parcel is an expression' do
|
91
|
+
let(:negative) { Danica.build(:y) { -y } }
|
92
|
+
|
93
|
+
it 'knows how to order variables' do
|
94
|
+
expect(result.to_gnu).to eq('x * (-y)')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'when negative is the negative of an expression' do
|
99
|
+
let(:negative) { -Danica.build(:y) { y } }
|
100
|
+
|
101
|
+
it 'knows how to order variables' do
|
102
|
+
expect(result.to_gnu).to eq('x * (-y)')
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe
|
5
|
+
describe Danica::Operator::Power do
|
4
6
|
describe 'of additions' do
|
5
7
|
subject do
|
6
|
-
|
8
|
+
described_class.new(
|
7
9
|
Danica::Operator::Addition.new(3, 4),
|
8
10
|
Danica::Operator::Addition.new(5, 6)
|
9
11
|
)
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Danica::Wrapper::Negative do
|
6
|
+
describe 'with a addition' do
|
7
|
+
subject do
|
8
|
+
described_class.new(
|
9
|
+
Danica::Operator::Addition.new(1, 2, 3)
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#to_gnu' do
|
14
|
+
it 'returns the correct string' do
|
15
|
+
expect(subject.to_gnu).to eq('-(1 + 2 + 3)')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#to_tex' do
|
20
|
+
it 'returns the correct string' do
|
21
|
+
expect(subject.to_tex).to eq('-\left(1 + 2 + 3\right)')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'when it is the result of an expression' do
|
26
|
+
subject do
|
27
|
+
x - negative_parcel
|
28
|
+
end
|
29
|
+
|
30
|
+
let(:x) { Danica::Wrapper::Variable.new(:x) }
|
31
|
+
let(:y) { Danica::Wrapper::Variable.new(:y) }
|
32
|
+
let(:z) { Danica::Wrapper::Variable.new(:z) }
|
33
|
+
let(:negative_parcel) { y + z }
|
34
|
+
|
35
|
+
it 'wraps parcel into a group' do
|
36
|
+
expect(subject.to_gnu).to eq('x -(y + z)')
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when the negative parcel is an expression' do
|
40
|
+
let(:negative_parcel) { Danica.build(:y, :z) { y + z } }
|
41
|
+
|
42
|
+
it 'wraps parcel into a group' do
|
43
|
+
expect(subject.to_gnu).to eq('x -(y + z)')
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when negative has just one element' do
|
47
|
+
let(:negative_parcel) { Danica.build(:y) { y } }
|
48
|
+
|
49
|
+
it 'wraps parcel into a group' do
|
50
|
+
expect(subject.to_gnu).to eq('x -y')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|