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.
Files changed (123) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +71 -0
  3. data/.gitignore +6 -1
  4. data/.rubocop.yml +18 -0
  5. data/.rubocop_todo.yml +123 -0
  6. data/Dockerfile +22 -0
  7. data/Gemfile +2 -1
  8. data/README.md +9 -1
  9. data/Rakefile +4 -0
  10. data/config/check_specs.yml +13 -0
  11. data/config/rubycritc.rb +12 -0
  12. data/config/yardstick.rb +13 -0
  13. data/config/yardstick.yml +33 -0
  14. data/danica.gemspec +19 -10
  15. data/docker-compose.yml +14 -9
  16. data/lib/danica.rb +2 -1
  17. data/lib/danica/base_operations.rb +3 -0
  18. data/lib/danica/builder.rb +2 -0
  19. data/lib/danica/common.rb +8 -4
  20. data/lib/danica/dsl.rb +8 -6
  21. data/lib/danica/dsl/builder.rb +4 -1
  22. data/lib/danica/equation.rb +3 -3
  23. data/lib/danica/equation/builder.rb +2 -0
  24. data/lib/danica/exception.rb +3 -2
  25. data/lib/danica/expressable.rb +14 -8
  26. data/lib/danica/expression.rb +4 -2
  27. data/lib/danica/expression/gauss.rb +5 -5
  28. data/lib/danica/formatted.rb +27 -8
  29. data/lib/danica/function.rb +5 -3
  30. data/lib/danica/function/name.rb +2 -0
  31. data/lib/danica/operator.rb +13 -9
  32. data/lib/danica/operator/addition.rb +4 -3
  33. data/lib/danica/operator/chained.rb +4 -3
  34. data/lib/danica/operator/cos.rb +2 -1
  35. data/lib/danica/operator/division.rb +2 -1
  36. data/lib/danica/operator/exponential.rb +2 -1
  37. data/lib/danica/operator/functional.rb +3 -2
  38. data/lib/danica/operator/multiplication.rb +4 -2
  39. data/lib/danica/operator/power.rb +4 -3
  40. data/lib/danica/operator/sin.rb +2 -1
  41. data/lib/danica/operator/squared_root.rb +2 -1
  42. data/lib/danica/variables_holder.rb +7 -4
  43. data/lib/danica/variables_holder/alias_builder.rb +4 -4
  44. data/lib/danica/variables_holder/calculator.rb +2 -0
  45. data/lib/danica/variables_holder/store.rb +3 -2
  46. data/lib/danica/variables_holder/variables_builder.rb +2 -1
  47. data/lib/danica/version.rb +3 -1
  48. data/lib/danica/wrapper.rb +14 -9
  49. data/lib/danica/wrapper/constant.rb +10 -14
  50. data/lib/danica/wrapper/container.rb +3 -3
  51. data/lib/danica/wrapper/group.rb +3 -2
  52. data/lib/danica/wrapper/negative.rb +3 -1
  53. data/lib/danica/wrapper/number.rb +6 -3
  54. data/lib/danica/wrapper/plus_minus.rb +3 -1
  55. data/lib/danica/wrapper/variable.rb +13 -8
  56. data/scripts/check_readme.sh +6 -0
  57. data/scripts/rubycritic.sh +10 -0
  58. data/spec/integration/global/danica/formatted_spec.rb +87 -0
  59. data/spec/integration/global/danica/operator/addition_spec.rb +32 -0
  60. data/spec/integration/{multiplication_spec.rb → global/danica/operator/multiplication_spec.rb} +12 -9
  61. data/spec/integration/{power_spec.rb → global/danica/operator/power_spec.rb} +4 -2
  62. data/spec/integration/{negative_spec.rb → global/danica/wrapper/negative_spec.rb} +9 -8
  63. data/spec/integration/{plus_minus_spec.rb → global/danica/wrapper/plus_minus_spec.rb} +5 -4
  64. data/spec/integration/readme/constant_spec.rb +4 -1
  65. data/spec/integration/readme/danica/formatted_spec.rb +24 -0
  66. data/spec/integration/readme/danica_spec.rb +20 -4
  67. data/spec/integration/readme/equation_spec.rb +4 -2
  68. data/spec/integration/readme/expression_spec.rb +11 -8
  69. data/spec/integration/readme/function_spec.rb +11 -7
  70. data/spec/integration/readme/number_spec.rb +9 -8
  71. data/spec/integration/readme/operator_spec.rb +3 -1
  72. data/spec/integration/readme/variables_spec.rb +8 -6
  73. data/spec/lib/danica/common_spec.rb +71 -10
  74. data/spec/lib/danica/dsl_spec.rb +21 -18
  75. data/spec/lib/danica/equation_spec.rb +10 -8
  76. data/spec/lib/danica/expressable_spec.rb +5 -2
  77. data/spec/lib/danica/expression/gauss_spec.rb +6 -3
  78. data/spec/lib/danica/expression_spec.rb +48 -26
  79. data/spec/lib/danica/formatted_spec.rb +34 -13
  80. data/spec/lib/danica/function/name_spec.rb +3 -1
  81. data/spec/lib/danica/function_spec.rb +14 -10
  82. data/spec/lib/danica/operator/addition_spec.rb +16 -15
  83. data/spec/lib/danica/operator/cos_spec.rb +9 -8
  84. data/spec/lib/danica/operator/division_spec.rb +18 -17
  85. data/spec/lib/danica/operator/exponential_spec.rb +9 -8
  86. data/spec/lib/danica/operator/multiplication_spec.rb +16 -15
  87. data/spec/lib/danica/operator/power_spec.rb +17 -16
  88. data/spec/lib/danica/operator/sin_spec.rb +9 -8
  89. data/spec/lib/danica/operator/squared_root_spec.rb +9 -8
  90. data/spec/lib/danica/operator_spec.rb +13 -4
  91. data/spec/lib/danica/variables_holder/store_spec.rb +19 -13
  92. data/spec/lib/danica/variables_holder_spec.rb +76 -59
  93. data/spec/lib/danica/wrapper/constant_spec.rb +9 -2
  94. data/spec/lib/danica/wrapper/group_spec.rb +4 -1
  95. data/spec/lib/danica/wrapper/negative_spec.rb +4 -1
  96. data/spec/lib/danica/wrapper/number_spec.rb +8 -3
  97. data/spec/lib/danica/wrapper/plus_minus_spec.rb +4 -1
  98. data/spec/lib/danica/wrapper/variable_spec.rb +6 -3
  99. data/spec/lib/danica/wrapper_spec.rb +14 -12
  100. data/spec/lib/danica_spec.rb +6 -5
  101. data/spec/spec_helper.rb +3 -2
  102. data/spec/support/models/expression/baskara.rb +3 -3
  103. data/spec/support/models/expression/parabole.rb +2 -0
  104. data/spec/support/models/expression/quadratic_sum.rb +3 -1
  105. data/spec/support/models/expression/spatial.rb +2 -1
  106. data/spec/support/models/function/my_function.rb +3 -1
  107. data/spec/support/models/function/parabole.rb +1 -1
  108. data/spec/support/models/function/quadratic_sum.rb +2 -0
  109. data/spec/support/models/function/spatial.rb +2 -0
  110. data/spec/support/models/operator/inverse.rb +3 -1
  111. data/spec/support/models/operator/my_operator.rb +3 -1
  112. data/spec/support/models/variables_holder/dummy.rb +3 -1
  113. data/spec/support/shared_contexts/common.rb +4 -2
  114. data/spec/support/shared_examples/base_operations.rb +7 -4
  115. data/spec/support/shared_examples/common.rb +3 -1
  116. data/spec/support/shared_examples/operator/chained.rb +12 -6
  117. data/spec/support/shared_examples/operator/dual_term.rb +9 -8
  118. data/spec/support/shared_examples/operator/single_input.rb +7 -2
  119. data/spec/support/shared_examples/variable.rb +8 -4
  120. metadata +158 -36
  121. data/spec/integration/addition_spec.rb +0 -28
  122. data/spec/integration/formatted_spec.rb +0 -75
  123. 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
- Danica::Wrapper::Number.new(2)
30
+ Danica::Wrapper::Variable.new(:x),
31
+ described_class.new(2)
30
32
  ),
31
- Danica::Wrapper::Number.new(3)
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 ** Math::PI)
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
- Danica::Wrapper::Variable.new(:x)
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
- Danica::Wrapper::Variable.new(name: :x)
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, { name: :y }) + :z
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
- Danica::Wrapper::Variable.new(:x),
113
- Danica::Wrapper::Variable.new(:y)
114
+ described_class.new(:x),
115
+ described_class.new(:y)
114
116
  ),
115
- Danica::Wrapper::Variable.new(:z)
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
- context "when requesting wrong format" do
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, { opt: 1 })).to eq('gnu {:opt=>1}')
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 {:decimals=>nil}')
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 {:decimals=>nil}')
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
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- shared_context 'a class with alias to a clazz' do |aliaz, clazz, *variables|
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
- shared_context 'a class with mapped dsl' do
15
+ shared_examples 'a class with mapped dsl' do
14
16
  {
15
- addition: Danica::Operator::Addition,
16
- sum: Danica::Operator::Addition,
17
+ addition: Danica::Operator::Addition,
18
+ sum: Danica::Operator::Addition,
17
19
  multiplication: Danica::Operator::Multiplication,
18
- product: Danica::Operator::Multiplication,
19
- division: Danica::Operator::Division,
20
- power: Danica::Operator::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: Danica::Operator::SquaredRoot,
26
- sqrt: Danica::Operator::SquaredRoot,
27
- exponential: Danica::Operator::Exponential,
28
- sin: Danica::Operator::Sin,
29
- cos: Danica::Operator::Cos,
30
- group: Danica::Wrapper::Group,
31
- negative: Danica::Wrapper::Negative,
32
- number: Danica::Wrapper::Number,
33
- num: Danica::Wrapper::Number,
34
- plus_minus: Danica::Wrapper::PlusMinus,
35
- constant: Danica::Wrapper::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 ** 2 }
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(Danica::Equation)
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 ** 2 }
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(Danica::Equation)
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
- it_behaves_like 'an object that respond to basic_methods', ignore: %i(valued? container? is_grouped? priority)
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
- let(:variables) { %i(x y) }
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([:x, :y])
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( name: :S0, latex: 'S_0' ),
162
- initial_velocity: Danica::Wrapper::Variable.new( name: :V0, latex: 'V_0' )
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 'as hash' do
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 'as hash' do
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 array' do
223
- context 'as hash' do
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
- it 'returns the list of variables merged default and new variables' do
259
- expect(subject.variables.compact).to eq([
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
- let(:names) { [ :t, :a, :s0, :v0 ] }
270
- subject { described_class::Spatial.new *names }
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
- subject { described_class::Spatial.new(time, acceleration, initial_space, initial_velocity) }
303
- let(:expected) { initial_space + initial_velocity * time_value + acceleration * (time_value ** 2) / 2.0 }
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 'but calling calculate with a value for the variables' do
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)