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.
- checksums.yaml +5 -5
- data/.circleci/config.yml +28 -0
- data/.gitignore +6 -1
- data/.rubocop.yml +9 -0
- data/.rubocop_todo.yml +100 -0
- data/Dockerfile +26 -0
- data/Gemfile +2 -1
- data/Rakefile +4 -0
- data/config/rubycritc.rb +12 -0
- data/config/yardstick.rb +13 -0
- data/config/yardstick.yml +33 -0
- data/danica.gemspec +14 -7
- data/docker-compose.yml +14 -9
- data/lib/danica.rb +2 -1
- data/lib/danica/base_operations.rb +2 -0
- data/lib/danica/builder.rb +2 -0
- data/lib/danica/common.rb +5 -2
- data/lib/danica/dsl.rb +8 -6
- data/lib/danica/dsl/builder.rb +3 -1
- data/lib/danica/equation.rb +3 -3
- data/lib/danica/equation/builder.rb +2 -0
- data/lib/danica/exception.rb +3 -2
- data/lib/danica/expressable.rb +14 -8
- data/lib/danica/expression.rb +4 -2
- data/lib/danica/expression/gauss.rb +5 -5
- data/lib/danica/formatted.rb +4 -2
- data/lib/danica/function.rb +5 -3
- data/lib/danica/function/name.rb +2 -0
- data/lib/danica/operator.rb +12 -9
- data/lib/danica/operator/addition.rb +4 -3
- data/lib/danica/operator/chained.rb +4 -3
- data/lib/danica/operator/cos.rb +2 -1
- data/lib/danica/operator/division.rb +2 -1
- data/lib/danica/operator/exponential.rb +2 -1
- data/lib/danica/operator/functional.rb +3 -2
- data/lib/danica/operator/multiplication.rb +4 -2
- data/lib/danica/operator/power.rb +4 -3
- data/lib/danica/operator/sin.rb +2 -1
- data/lib/danica/operator/squared_root.rb +2 -1
- data/lib/danica/variables_holder.rb +7 -4
- data/lib/danica/variables_holder/alias_builder.rb +4 -4
- data/lib/danica/variables_holder/calculator.rb +2 -0
- data/lib/danica/variables_holder/store.rb +3 -2
- data/lib/danica/variables_holder/variables_builder.rb +2 -1
- data/lib/danica/version.rb +3 -1
- data/lib/danica/wrapper.rb +11 -9
- data/lib/danica/wrapper/constant.rb +9 -14
- data/lib/danica/wrapper/container.rb +2 -3
- data/lib/danica/wrapper/group.rb +2 -2
- data/lib/danica/wrapper/negative.rb +2 -1
- data/lib/danica/wrapper/number.rb +4 -3
- data/lib/danica/wrapper/plus_minus.rb +2 -1
- data/lib/danica/wrapper/variable.rb +10 -8
- data/scripts/check_readme.sh +6 -0
- data/scripts/rubycritic.sh +10 -0
- data/spec/integration/global/danica/formatted_spec.rb +87 -0
- data/spec/integration/global/danica/operator/addition_spec.rb +32 -0
- data/spec/integration/{multiplication_spec.rb → global/danica/operator/multiplication_spec.rb} +12 -9
- data/spec/integration/{power_spec.rb → global/danica/operator/power_spec.rb} +4 -2
- data/spec/integration/{negative_spec.rb → global/danica/wrapper/negative_spec.rb} +9 -8
- data/spec/integration/{plus_minus_spec.rb → global/danica/wrapper/plus_minus_spec.rb} +5 -4
- data/spec/integration/readme/constant_spec.rb +4 -1
- data/spec/integration/readme/danica/formatted_spec.rb +24 -0
- data/spec/integration/readme/danica_spec.rb +20 -4
- data/spec/integration/readme/equation_spec.rb +4 -2
- data/spec/integration/readme/expression_spec.rb +11 -8
- data/spec/integration/readme/function_spec.rb +11 -7
- data/spec/integration/readme/number_spec.rb +9 -8
- data/spec/integration/readme/operator_spec.rb +3 -1
- data/spec/integration/readme/variables_spec.rb +8 -6
- data/spec/lib/danica/common_spec.rb +23 -9
- data/spec/lib/danica/dsl_spec.rb +5 -2
- data/spec/lib/danica/equation_spec.rb +10 -8
- data/spec/lib/danica/expressable_spec.rb +5 -2
- data/spec/lib/danica/expression/gauss_spec.rb +6 -3
- data/spec/lib/danica/expression_spec.rb +48 -26
- data/spec/lib/danica/formatted_spec.rb +20 -14
- data/spec/lib/danica/function/name_spec.rb +3 -1
- data/spec/lib/danica/function_spec.rb +14 -10
- data/spec/lib/danica/operator/addition_spec.rb +16 -15
- data/spec/lib/danica/operator/cos_spec.rb +9 -8
- data/spec/lib/danica/operator/division_spec.rb +18 -17
- data/spec/lib/danica/operator/exponential_spec.rb +9 -8
- data/spec/lib/danica/operator/multiplication_spec.rb +16 -15
- data/spec/lib/danica/operator/power_spec.rb +17 -16
- data/spec/lib/danica/operator/sin_spec.rb +9 -8
- data/spec/lib/danica/operator/squared_root_spec.rb +9 -8
- data/spec/lib/danica/operator_spec.rb +13 -4
- data/spec/lib/danica/variables_holder/store_spec.rb +19 -13
- data/spec/lib/danica/variables_holder_spec.rb +76 -59
- data/spec/lib/danica/wrapper/constant_spec.rb +9 -2
- data/spec/lib/danica/wrapper/group_spec.rb +4 -1
- data/spec/lib/danica/wrapper/negative_spec.rb +4 -1
- data/spec/lib/danica/wrapper/number_spec.rb +8 -3
- data/spec/lib/danica/wrapper/plus_minus_spec.rb +4 -1
- data/spec/lib/danica/wrapper/variable_spec.rb +6 -3
- data/spec/lib/danica/wrapper_spec.rb +14 -12
- data/spec/lib/danica_spec.rb +6 -5
- data/spec/spec_helper.rb +2 -1
- data/spec/support/models/expression/baskara.rb +3 -3
- data/spec/support/models/expression/parabole.rb +2 -0
- data/spec/support/models/expression/quadratic_sum.rb +3 -1
- data/spec/support/models/expression/spatial.rb +2 -1
- data/spec/support/models/function/my_function.rb +3 -1
- data/spec/support/models/function/parabole.rb +1 -1
- data/spec/support/models/function/quadratic_sum.rb +2 -0
- data/spec/support/models/function/spatial.rb +2 -0
- data/spec/support/models/operator/inverse.rb +3 -1
- data/spec/support/models/operator/my_operator.rb +3 -1
- data/spec/support/models/variables_holder/dummy.rb +3 -1
- data/spec/support/shared_contexts/common.rb +4 -2
- data/spec/support/shared_examples/base_operations.rb +7 -4
- data/spec/support/shared_examples/common.rb +3 -1
- data/spec/support/shared_examples/operator/chained.rb +12 -6
- data/spec/support/shared_examples/operator/dual_term.rb +9 -8
- data/spec/support/shared_examples/operator/single_input.rb +7 -2
- data/spec/support/shared_examples/variable.rb +8 -4
- metadata +109 -30
- data/spec/integration/addition_spec.rb +0 -28
- data/spec/integration/formatted_spec.rb +0 -75
- data/spec/integration/readme/formatting_spec.rb +0 -34
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Constant
|
3
5
|
include BaseOperations
|
@@ -12,10 +14,10 @@ module Danica
|
|
12
14
|
|
13
15
|
def initialize(*args)
|
14
16
|
attrs = args.extract_options!
|
15
|
-
attrs = args.as_hash(%i
|
17
|
+
attrs = args.as_hash(%i[value latex gnuplot]).merge(attrs)
|
16
18
|
|
17
19
|
attrs.each do |key, value|
|
18
|
-
|
20
|
+
send("#{key}=", value)
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
@@ -28,30 +30,23 @@ module Danica
|
|
28
30
|
gnuplot == other.gnuplot && latex == other.latex && value == other.value
|
29
31
|
end
|
30
32
|
|
31
|
-
def to_tex(**
|
33
|
+
def to_tex(**_options)
|
32
34
|
latex.to_s
|
33
35
|
end
|
34
36
|
|
35
|
-
def to_gnu(**
|
37
|
+
def to_gnu(**_options)
|
36
38
|
gnuplot.to_s
|
37
39
|
end
|
38
40
|
|
39
41
|
private
|
40
42
|
|
41
|
-
|
42
|
-
@value = value
|
43
|
-
end
|
43
|
+
attr_writer :value
|
44
44
|
|
45
|
-
|
46
|
-
@latex = latex
|
47
|
-
end
|
45
|
+
attr_writer :latex
|
48
46
|
|
49
|
-
|
50
|
-
@gnuplot = gnuplot
|
51
|
-
end
|
47
|
+
attr_writer :gnuplot
|
52
48
|
end
|
53
49
|
|
54
50
|
E = Wrapper::Constant.new(Math::E, :e, 'exp(1)')
|
55
51
|
PI = Wrapper::Constant.new(Math::PI, '\pi', :pi)
|
56
52
|
end
|
57
|
-
|
data/lib/danica/wrapper/group.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Number
|
3
5
|
include BaseOperations
|
@@ -13,9 +15,9 @@ module Danica
|
|
13
15
|
@value = value
|
14
16
|
end
|
15
17
|
|
16
|
-
def to(
|
18
|
+
def to(_format, decimals: nil, **_options)
|
17
19
|
return value.to_i.to_s if value.to_i == value
|
18
|
-
return ("%.#{decimals}f"
|
20
|
+
return format("%.#{decimals}f", value).to_f.to_s if decimals
|
19
21
|
value.to_s
|
20
22
|
end
|
21
23
|
|
@@ -33,4 +35,3 @@ module Danica
|
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
36
|
-
|
@@ -1,9 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Variable
|
3
5
|
include BaseOperations
|
4
6
|
include Common
|
5
7
|
|
6
|
-
attr_accessor :
|
8
|
+
attr_accessor :name, :latex, :gnuplot
|
9
|
+
attr_reader :value
|
7
10
|
|
8
11
|
default_value :priority, 10
|
9
12
|
default_value :is_grouped?, false
|
@@ -11,10 +14,10 @@ module Danica
|
|
11
14
|
|
12
15
|
def initialize(*args)
|
13
16
|
attrs = args.extract_options!
|
14
|
-
attrs = args.as_hash(%i
|
17
|
+
attrs = args.as_hash(%i[name value latex gnuplot]).merge(attrs)
|
15
18
|
|
16
19
|
attrs.each do |key, value|
|
17
|
-
|
20
|
+
public_send("#{key}=", value)
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
@@ -24,10 +27,10 @@ module Danica
|
|
24
27
|
|
25
28
|
def ==(other)
|
26
29
|
return false unless other.class == self.class
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
30
|
+
other.value == value &&
|
31
|
+
other.name == name &&
|
32
|
+
other.latex == latex &&
|
33
|
+
other.gnuplot == gnuplot
|
31
34
|
end
|
32
35
|
|
33
36
|
def to_tex(**options)
|
@@ -45,4 +48,3 @@ module Danica
|
|
45
48
|
end
|
46
49
|
end
|
47
50
|
end
|
48
|
-
|
@@ -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
|
data/spec/integration/{multiplication_spec.rb → global/danica/operator/multiplication_spec.rb}
RENAMED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe
|
5
|
+
describe Danica::Operator::Multiplication do
|
4
6
|
describe 'of number and addition' do
|
5
7
|
subject do
|
6
|
-
|
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
|
-
|
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
|
-
|
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(
|
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(
|
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(
|
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
|
5
|
+
describe Danica::Operator::Power do
|
4
6
|
describe 'of additions' do
|
5
7
|
subject do
|
6
|
-
|
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
|
5
|
+
describe Danica::Wrapper::Negative do
|
4
6
|
describe 'with a addition' do
|
5
7
|
subject do
|
6
|
-
|
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
|
5
|
+
describe Danica::Wrapper::PlusMinus do
|
4
6
|
describe 'with a addition' do
|
5
7
|
subject do
|
6
|
-
|
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
|
-
|