danica 2.7.4 → 2.7.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +28 -0
  3. data/.gitignore +6 -1
  4. data/.rubocop.yml +9 -0
  5. data/.rubocop_todo.yml +100 -0
  6. data/Dockerfile +26 -0
  7. data/Gemfile +2 -1
  8. data/Rakefile +4 -0
  9. data/config/rubycritc.rb +12 -0
  10. data/config/yardstick.rb +13 -0
  11. data/config/yardstick.yml +33 -0
  12. data/danica.gemspec +14 -7
  13. data/docker-compose.yml +14 -9
  14. data/lib/danica.rb +2 -1
  15. data/lib/danica/base_operations.rb +2 -0
  16. data/lib/danica/builder.rb +2 -0
  17. data/lib/danica/common.rb +5 -2
  18. data/lib/danica/dsl.rb +8 -6
  19. data/lib/danica/dsl/builder.rb +3 -1
  20. data/lib/danica/equation.rb +3 -3
  21. data/lib/danica/equation/builder.rb +2 -0
  22. data/lib/danica/exception.rb +3 -2
  23. data/lib/danica/expressable.rb +14 -8
  24. data/lib/danica/expression.rb +4 -2
  25. data/lib/danica/expression/gauss.rb +5 -5
  26. data/lib/danica/formatted.rb +4 -2
  27. data/lib/danica/function.rb +5 -3
  28. data/lib/danica/function/name.rb +2 -0
  29. data/lib/danica/operator.rb +12 -9
  30. data/lib/danica/operator/addition.rb +4 -3
  31. data/lib/danica/operator/chained.rb +4 -3
  32. data/lib/danica/operator/cos.rb +2 -1
  33. data/lib/danica/operator/division.rb +2 -1
  34. data/lib/danica/operator/exponential.rb +2 -1
  35. data/lib/danica/operator/functional.rb +3 -2
  36. data/lib/danica/operator/multiplication.rb +4 -2
  37. data/lib/danica/operator/power.rb +4 -3
  38. data/lib/danica/operator/sin.rb +2 -1
  39. data/lib/danica/operator/squared_root.rb +2 -1
  40. data/lib/danica/variables_holder.rb +7 -4
  41. data/lib/danica/variables_holder/alias_builder.rb +4 -4
  42. data/lib/danica/variables_holder/calculator.rb +2 -0
  43. data/lib/danica/variables_holder/store.rb +3 -2
  44. data/lib/danica/variables_holder/variables_builder.rb +2 -1
  45. data/lib/danica/version.rb +3 -1
  46. data/lib/danica/wrapper.rb +11 -9
  47. data/lib/danica/wrapper/constant.rb +9 -14
  48. data/lib/danica/wrapper/container.rb +2 -3
  49. data/lib/danica/wrapper/group.rb +2 -2
  50. data/lib/danica/wrapper/negative.rb +2 -1
  51. data/lib/danica/wrapper/number.rb +4 -3
  52. data/lib/danica/wrapper/plus_minus.rb +2 -1
  53. data/lib/danica/wrapper/variable.rb +10 -8
  54. data/scripts/check_readme.sh +6 -0
  55. data/scripts/rubycritic.sh +10 -0
  56. data/spec/integration/global/danica/formatted_spec.rb +87 -0
  57. data/spec/integration/global/danica/operator/addition_spec.rb +32 -0
  58. data/spec/integration/{multiplication_spec.rb → global/danica/operator/multiplication_spec.rb} +12 -9
  59. data/spec/integration/{power_spec.rb → global/danica/operator/power_spec.rb} +4 -2
  60. data/spec/integration/{negative_spec.rb → global/danica/wrapper/negative_spec.rb} +9 -8
  61. data/spec/integration/{plus_minus_spec.rb → global/danica/wrapper/plus_minus_spec.rb} +5 -4
  62. data/spec/integration/readme/constant_spec.rb +4 -1
  63. data/spec/integration/readme/danica/formatted_spec.rb +24 -0
  64. data/spec/integration/readme/danica_spec.rb +20 -4
  65. data/spec/integration/readme/equation_spec.rb +4 -2
  66. data/spec/integration/readme/expression_spec.rb +11 -8
  67. data/spec/integration/readme/function_spec.rb +11 -7
  68. data/spec/integration/readme/number_spec.rb +9 -8
  69. data/spec/integration/readme/operator_spec.rb +3 -1
  70. data/spec/integration/readme/variables_spec.rb +8 -6
  71. data/spec/lib/danica/common_spec.rb +23 -9
  72. data/spec/lib/danica/dsl_spec.rb +5 -2
  73. data/spec/lib/danica/equation_spec.rb +10 -8
  74. data/spec/lib/danica/expressable_spec.rb +5 -2
  75. data/spec/lib/danica/expression/gauss_spec.rb +6 -3
  76. data/spec/lib/danica/expression_spec.rb +48 -26
  77. data/spec/lib/danica/formatted_spec.rb +20 -14
  78. data/spec/lib/danica/function/name_spec.rb +3 -1
  79. data/spec/lib/danica/function_spec.rb +14 -10
  80. data/spec/lib/danica/operator/addition_spec.rb +16 -15
  81. data/spec/lib/danica/operator/cos_spec.rb +9 -8
  82. data/spec/lib/danica/operator/division_spec.rb +18 -17
  83. data/spec/lib/danica/operator/exponential_spec.rb +9 -8
  84. data/spec/lib/danica/operator/multiplication_spec.rb +16 -15
  85. data/spec/lib/danica/operator/power_spec.rb +17 -16
  86. data/spec/lib/danica/operator/sin_spec.rb +9 -8
  87. data/spec/lib/danica/operator/squared_root_spec.rb +9 -8
  88. data/spec/lib/danica/operator_spec.rb +13 -4
  89. data/spec/lib/danica/variables_holder/store_spec.rb +19 -13
  90. data/spec/lib/danica/variables_holder_spec.rb +76 -59
  91. data/spec/lib/danica/wrapper/constant_spec.rb +9 -2
  92. data/spec/lib/danica/wrapper/group_spec.rb +4 -1
  93. data/spec/lib/danica/wrapper/negative_spec.rb +4 -1
  94. data/spec/lib/danica/wrapper/number_spec.rb +8 -3
  95. data/spec/lib/danica/wrapper/plus_minus_spec.rb +4 -1
  96. data/spec/lib/danica/wrapper/variable_spec.rb +6 -3
  97. data/spec/lib/danica/wrapper_spec.rb +14 -12
  98. data/spec/lib/danica_spec.rb +6 -5
  99. data/spec/spec_helper.rb +2 -1
  100. data/spec/support/models/expression/baskara.rb +3 -3
  101. data/spec/support/models/expression/parabole.rb +2 -0
  102. data/spec/support/models/expression/quadratic_sum.rb +3 -1
  103. data/spec/support/models/expression/spatial.rb +2 -1
  104. data/spec/support/models/function/my_function.rb +3 -1
  105. data/spec/support/models/function/parabole.rb +1 -1
  106. data/spec/support/models/function/quadratic_sum.rb +2 -0
  107. data/spec/support/models/function/spatial.rb +2 -0
  108. data/spec/support/models/operator/inverse.rb +3 -1
  109. data/spec/support/models/operator/my_operator.rb +3 -1
  110. data/spec/support/models/variables_holder/dummy.rb +3 -1
  111. data/spec/support/shared_contexts/common.rb +4 -2
  112. data/spec/support/shared_examples/base_operations.rb +7 -4
  113. data/spec/support/shared_examples/common.rb +3 -1
  114. data/spec/support/shared_examples/operator/chained.rb +12 -6
  115. data/spec/support/shared_examples/operator/dual_term.rb +9 -8
  116. data/spec/support/shared_examples/operator/single_input.rb +7 -2
  117. data/spec/support/shared_examples/variable.rb +8 -4
  118. metadata +109 -30
  119. data/spec/integration/addition_spec.rb +0 -28
  120. data/spec/integration/formatted_spec.rb +0 -75
  121. data/spec/integration/readme/formatting_spec.rb +0 -34
@@ -1,9 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Danica::Wrapper::Constant do
4
6
  subject do
5
- Danica::Wrapper::Constant.new(gnuplot: 'pi', latex: '\pi', value: 3.141592)
7
+ described_class.new(gnuplot: 'pi', latex: '\pi', value: 3.141592)
6
8
  end
9
+
7
10
  let(:output) do
8
11
  {
9
12
  tex: '\pi',
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Danica::Formatted do
6
+ describe 'formatting' do
7
+ subject do
8
+ expression.tex(decimals: 3)
9
+ end
10
+
11
+ let(:expression) do
12
+ value = 1 / 3.0
13
+ Danica.build(:x) do
14
+ x + value
15
+ end
16
+ end
17
+
18
+ describe '#to_tex' do
19
+ it 'formats the output' do
20
+ expect(subject.to_s).to eq('x + 0.333')
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,11 +1,28 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Danica do
6
+ describe 'formatting' do
7
+ subject do
8
+ value = 1 / 3.0
9
+ described_class.build(:x) do
10
+ x + value
11
+ end
12
+ end
13
+
14
+ describe '#to_tex' do
15
+ it 'formats the output' do
16
+ expect(subject.to_tex(decimals: 3)).to eq('x + 0.333')
17
+ end
18
+ end
19
+ end
20
+
4
21
  describe '.build' do
5
22
  context 'when building an expression' do
6
23
  let(:expression) do
7
- Danica.build do
8
- (number(1) + 2) * power(3,4)
24
+ described_class.build do
25
+ (number(1) + 2) * power(3, 4)
9
26
  end
10
27
  end
11
28
 
@@ -16,7 +33,7 @@ describe Danica do
16
33
 
17
34
  context 'when building a function' do
18
35
  let(:function) do
19
- Danica.build do
36
+ described_class.build do
20
37
  Danica::Function.create(:x, :y) do
21
38
  (number(1) + x) * power(3, y)
22
39
  end
@@ -29,4 +46,3 @@ describe Danica do
29
46
  end
30
47
  end
31
48
  end
32
-
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Danica::Equation do
4
6
  subject do
5
7
  described_class.build(:x, :y, :z) do
6
- left { x ** 2 + y ** 2 }
7
- right { number(1) - z ** 2 }
8
+ left { x**2 + y**2 }
9
+ right { number(1) - z**2 }
8
10
  end.new
9
11
  end
10
12
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Danica::Expression::Baskara do
@@ -9,18 +11,19 @@ describe Danica::Expression::Baskara do
9
11
  end
10
12
 
11
13
  describe Danica::Expression do
14
+ subject { clazz.new }
15
+
12
16
  let(:clazz) do
13
17
  described_class.build(:a, :b, :c) do
14
- (
15
- negative(b) + Danica::Wrapper::PlusMinus.new(
16
- squared_root(
17
- power(b, 2) - multiplication(4, a, c)
18
- )
19
- )
20
- ) / (number(2) * a)
18
+ (
19
+ negative(b) + Danica::Wrapper::PlusMinus.new(
20
+ squared_root(
21
+ power(b, 2) - multiplication(4, a, c)
22
+ )
23
+ )
24
+ ) / (number(2) * a)
21
25
  end
22
26
  end
23
- subject { clazz.new }
24
27
 
25
28
  describe 'to_tex' do
26
29
  it 'returns bascara tex string' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Danica::Function::Spatial do
@@ -13,19 +15,20 @@ describe Danica::Function::Spatial do
13
15
  let(:name) { :f }
14
16
 
15
17
  context 'when using it as default' do
18
+ subject { described_class.new }
19
+
16
20
  let(:left) { "#{name}(time, acceleration, initial_space, initial_velocity)" }
17
21
  let(:right) { 'initial_space + initial_velocity * time + (acceleration * time**(2))/(2)' }
18
22
 
19
- subject { described_class.new }
20
-
21
23
  it 'knows how to return to gnu format' do
22
24
  expect(subject.to_gnu).to eq("#{left} = #{right}")
23
25
  end
24
26
 
25
27
  context 'when changing the name' do
26
- let(:name) { :g }
27
28
  subject { described_class.new(name: name) }
28
29
 
30
+ let(:name) { :g }
31
+
29
32
  it 'knows how to return to gnu format' do
30
33
  expect(subject.to_gnu).to eq("#{left} = #{right}")
31
34
  end
@@ -33,14 +36,14 @@ describe Danica::Function::Spatial do
33
36
  end
34
37
 
35
38
  context 'when setting the variables' do
39
+ subject { described_class.new(variables) }
40
+
36
41
  let(:variables) do
37
42
  { time: :t, acceleration: :a, initial_space: :s0, initial_velocity: :v0 }
38
43
  end
39
44
  let(:left) { "#{name}(t, a, s0, v0)" }
40
45
  let(:right) { 's0 + v0 * t + (a * t**(2))/(2)' }
41
46
 
42
- subject { described_class.new(variables) }
43
-
44
47
  it 'knows how to return to gnu format' do
45
48
  expect(subject.to_gnu).to eq("#{left} = #{right}")
46
49
  end
@@ -76,13 +79,14 @@ end
76
79
  describe Danica::Function::QuadraticSum do
77
80
  describe '#to_tex' do
78
81
  it 'creates a funcion out of an expression' do
79
- expect(subject.to_tex).to eq("f(x, y) = \\left(x + y\\right)^{2}")
82
+ expect(subject.to_tex).to eq('f(x, y) = \\left(x + y\\right)^{2}')
80
83
  end
81
84
  end
82
85
  end
83
86
 
84
87
  describe Danica::Function do
85
- subject { described_class.build(:x, :y, :z) { z*(x ** y) }.new(y: 3, z: Danica::PI) }
88
+ subject { described_class.build(:x, :y, :z) { z * (x**y) }.new(y: 3, z: Danica::PI) }
89
+
86
90
  describe '#to_tex' do
87
91
  it do
88
92
  expect(subject.to_tex).to eq('f(x, 3) = \pi \cdot x^{3}')
@@ -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,20 +86,22 @@ 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
84
94
 
85
95
  context 'when formatted was generated with gnu and with options' do
86
- let(:number) { Danica::Wrapper::Number.new(1.0/3) }
87
96
  subject { number.gnu(decimals: 3) }
88
97
 
98
+ let(:number) { Danica::Wrapper::Number.new(1.0 / 3) }
99
+
89
100
  it 'formats with the current options' do
90
101
  expect(subject.to_tex).to eq('0.333')
91
102
  end
92
103
 
93
- context 'but overwritting options' do
104
+ context 'when overwritting options' do
94
105
  it 'formats with the current options' do
95
106
  expect(subject.to_tex(decimals: 4)).to eq('0.3333')
96
107
  end
@@ -101,20 +112,22 @@ describe Danica::Common do
101
112
  describe '#to_gnu' do
102
113
  context 'when defined the #to method' do
103
114
  let(:clazz) { described_class::Dummy2 }
115
+
104
116
  it 'returns the call of #to(:gnu)' do
105
117
  expect(subject.to_gnu).to eq('formatted: gnu')
106
118
  end
107
119
  end
108
120
 
109
121
  context 'when formatted was generated with tex and with options' do
110
- let(:number) { Danica::Wrapper::Number.new(1.0/3) }
111
122
  subject { number.tex(decimals: 3) }
112
123
 
124
+ let(:number) { Danica::Wrapper::Number.new(1.0 / 3) }
125
+
113
126
  it 'formats with the current options' do
114
127
  expect(subject.to_gnu).to eq('0.333')
115
128
  end
116
129
 
117
- context 'but overwritting options' do
130
+ context 'when overwritting options' do
118
131
  it 'formats with the current options' do
119
132
  expect(subject.to_gnu(decimals: 4)).to eq('0.3333')
120
133
  end
@@ -124,9 +137,10 @@ describe Danica::Common do
124
137
 
125
138
  describe 'to' do
126
139
  context 'when already formatted with options' do
127
- let(:number) { Danica::Wrapper::Number.new(1.0/3) }
128
140
  subject { number.tex(decimals: 3) }
129
141
 
142
+ let(:number) { Danica::Wrapper::Number.new(1.0 / 3) }
143
+
130
144
  it 'uses to with options' do
131
145
  expect(subject.to(:gnu)).to eq('0.333')
132
146
  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,7 +12,7 @@ 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
17
  addition: Danica::Operator::Addition,
16
18
  sum: Danica::Operator::Addition,
@@ -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