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
@@ -0,0 +1,6 @@
1
+ #! /bin/bash
2
+
3
+ PROJECT=danica
4
+ VERSION=$(grep VERSION lib/$PROJECT/version.rb | sed -e "s/.*'\(.*\)'/\1/g")
5
+
6
+ grep https://www.rubydoc.info/gems/$PROJECT/$VERSION README.md
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+
3
+ DIFF_LIST=$(git diff --name-only $CIRCLE_SHA1 $(git merge-base $CIRCLE_SHA1 origin/master) | grep "^lib/")
4
+
5
+ if [ ! -z "$DIFF_LIST" ]; then
6
+ mkdir -p tmp/rubycritic/compare
7
+ bundle exec rubycritic --format console --branch origin/master -t 0 --maximum-decrease 1 $DIFF_LIST
8
+ else
9
+ echo "No changes detected. Skipping rubycritic..."
10
+ fi
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Danica::Formatted do
6
+ describe 'integration of formatted objects' do
7
+ subject do
8
+ variable.tex
9
+ end
10
+
11
+ let(:variable) { Danica.build(:v) { v } }
12
+
13
+ context 'when interacting with a multiplication' do
14
+ let(:other) do
15
+ Danica.build(:x, :y) { x * y }
16
+ end
17
+
18
+ context 'when multipling another multiplication' do
19
+ let(:result) { subject * other }
20
+
21
+ it do
22
+ expect(result).to be_a(described_class)
23
+ end
24
+
25
+ it 'knows how to convert it to string' do
26
+ expect(result.to_s).to eq('v \\cdot x \\cdot y')
27
+ end
28
+ end
29
+
30
+ context 'when multiplicated by another multiplication' do
31
+ let(:result) { other * subject }
32
+
33
+ it do
34
+ expect(result).to be_a(described_class)
35
+ end
36
+
37
+ it 'knows how to convert it to string' do
38
+ expect(result.to_s).to eq('x \\cdot y \\cdot v')
39
+ end
40
+ end
41
+ end
42
+
43
+ context 'when interacting with a sum' do
44
+ let(:other) do
45
+ Danica.build(:x, :y) { x + y }
46
+ end
47
+
48
+ context 'when summing another sum' do
49
+ let(:result) { subject + other }
50
+
51
+ it do
52
+ expect(result).to be_a(described_class)
53
+ end
54
+
55
+ it 'knows how to convert it to string' do
56
+ expect(result.to_s).to eq('v + x + y')
57
+ end
58
+ end
59
+
60
+ context 'when added by another sum' do
61
+ let(:result) { other + subject }
62
+
63
+ it do
64
+ expect(result).to be_a(described_class)
65
+ end
66
+
67
+ it 'knows how to convert it to string' do
68
+ expect(result.to_s).to eq('x + y + v')
69
+ end
70
+ end
71
+ end
72
+
73
+ context 'when operating multiplication and subtraction all toguether' do
74
+ let(:variable) { Danica::Wrapper::Variable.new(:v) }
75
+ let(:x) { Danica::Wrapper::Variable.new(:x) }
76
+ let(:result) { x * -subject }
77
+
78
+ it do
79
+ expect(result).to be_a(described_class)
80
+ end
81
+
82
+ it 'knows how to convert it to string' do
83
+ expect(result.to_s).to eq('x \cdot \left(-v\right)')
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Danica::Operator::Addition do
6
+ describe 'integration' do
7
+ describe 'with negative and positivenegative (+/-) numbers' do
8
+ subject do
9
+ described_class.new(
10
+ Danica::Wrapper::Negative.new(1),
11
+ 2,
12
+ -3,
13
+ 4,
14
+ Danica::Wrapper::PlusMinus.new(5),
15
+ Danica::Wrapper::Number.new(-6)
16
+ )
17
+ end
18
+
19
+ describe '#to_gnu' do
20
+ it 'returns the correct string' do
21
+ expect(subject.to_gnu).to eq('-1 + 2 -3 + 4 + 5 -6')
22
+ end
23
+ end
24
+
25
+ describe '#to_tex' do
26
+ it 'returns the correct string' do
27
+ expect(subject.to_tex).to eq('-1 + 2 -3 + 4 \pm 5 -6')
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe 'integration of multiplication' do
5
+ describe Danica::Operator::Multiplication do
4
6
  describe 'of number and addition' do
5
7
  subject do
6
- Danica::Operator::Multiplication.new(
8
+ described_class.new(
7
9
  3, Danica::Operator::Addition.new(2, 4)
8
10
  )
9
11
  end
@@ -23,9 +25,9 @@ describe 'integration of multiplication' do
23
25
 
24
26
  describe 'of additions' do
25
27
  subject do
26
- Danica::Operator::Multiplication.new(
27
- Danica::Operator::Addition.new(1,2),
28
- Danica::Operator::Addition.new(3,4)
28
+ described_class.new(
29
+ Danica::Operator::Addition.new(1, 2),
30
+ Danica::Operator::Addition.new(3, 4)
29
31
  )
30
32
  end
31
33
 
@@ -44,13 +46,14 @@ describe 'integration of multiplication' do
44
46
 
45
47
  describe 'when calling * operator' do
46
48
  subject do
47
- Danica::Operator::Multiplication.new(:x, :y)
49
+ described_class.new(:x, :y)
48
50
  end
51
+
49
52
  let(:variable) { Danica::Wrapper::Variable.new(:v) }
50
53
  let(:result) { subject * variable }
51
54
 
52
55
  it do
53
- expect(result).to be_a(Danica::Operator::Multiplication)
56
+ expect(result).to be_a(described_class)
54
57
  end
55
58
 
56
59
  it 'knows how to order variables' do
@@ -61,7 +64,7 @@ describe 'integration of multiplication' do
61
64
  let(:result) { variable * subject }
62
65
 
63
66
  it do
64
- expect(result).to be_a(Danica::Operator::Multiplication)
67
+ expect(result).to be_a(described_class)
65
68
  end
66
69
 
67
70
  it 'knows how to order variables' do
@@ -77,7 +80,7 @@ describe 'integration of multiplication' do
77
80
  let(:result) { x * negative }
78
81
 
79
82
  it do
80
- expect(result).to be_a(Danica::Operator::Multiplication)
83
+ expect(result).to be_a(described_class)
81
84
  end
82
85
 
83
86
  it 'knows how to order variables' do
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe 'integration of power' do
5
+ describe Danica::Operator::Power do
4
6
  describe 'of additions' do
5
7
  subject do
6
- Danica::Operator::Power.new(
8
+ described_class.new(
7
9
  Danica::Operator::Addition.new(3, 4),
8
10
  Danica::Operator::Addition.new(5, 6)
9
11
  )
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe 'integration of negative' do
5
+ describe Danica::Wrapper::Negative do
4
6
  describe 'with a addition' do
5
7
  subject do
6
- Danica::Wrapper::Negative.new(
7
- Danica::Operator::Addition.new(1,2,3)
8
+ described_class.new(
9
+ Danica::Operator::Addition.new(1, 2, 3)
8
10
  )
9
11
  end
10
12
 
@@ -21,13 +23,14 @@ describe 'integration of negative' do
21
23
  end
22
24
 
23
25
  describe 'when it is the result of an expression' do
26
+ subject do
27
+ x - negative_parcel
28
+ end
29
+
24
30
  let(:x) { Danica::Wrapper::Variable.new(:x) }
25
31
  let(:y) { Danica::Wrapper::Variable.new(:y) }
26
32
  let(:z) { Danica::Wrapper::Variable.new(:z) }
27
33
  let(:negative_parcel) { y + z }
28
- subject do
29
- x - negative_parcel
30
- end
31
34
 
32
35
  it 'wraps parcel into a group' do
33
36
  expect(subject.to_gnu).to eq('x -(y + z)')
@@ -51,5 +54,3 @@ describe 'integration of negative' do
51
54
  end
52
55
  end
53
56
  end
54
-
55
-
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe 'integration of positive negative' do
5
+ describe Danica::Wrapper::PlusMinus do
4
6
  describe 'with a addition' do
5
7
  subject do
6
- Danica::Wrapper::PlusMinus.new(
7
- Danica::Operator::Addition.new(1,2,3)
8
+ described_class.new(
9
+ Danica::Operator::Addition.new(1, 2, 3)
8
10
  )
9
11
  end
10
12
 
@@ -21,4 +23,3 @@ describe 'integration of positive negative' do
21
23
  end
22
24
  end
23
25
  end
24
-
@@ -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}')