danica 2.7.2 → 2.7.7

Sign up to get free protection for your applications and to get access to all the features.
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)