danica 2.7.4 → 2.7.5

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 (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