danica 2.6.4 → 2.7.1
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 +4 -4
- data/README.md +49 -6
- data/lib/danica.rb +1 -0
- data/lib/danica/common.rb +17 -8
- data/lib/danica/equation.rb +2 -2
- data/lib/danica/exception.rb +1 -1
- data/lib/danica/expressable.rb +1 -1
- data/lib/danica/expression.rb +1 -1
- data/lib/danica/expression/gauss.rb +1 -1
- data/lib/danica/formatted.rb +30 -0
- data/lib/danica/function/name.rb +6 -4
- data/lib/danica/operator/chained.rb +4 -4
- data/lib/danica/operator/division.rb +4 -4
- data/lib/danica/operator/functional.rb +4 -4
- data/lib/danica/operator/power.rb +4 -4
- data/lib/danica/version.rb +1 -1
- data/lib/danica/wrapper.rb +1 -1
- data/lib/danica/wrapper/constant.rb +8 -8
- data/lib/danica/wrapper/group.rb +4 -4
- data/lib/danica/wrapper/negative.rb +2 -2
- data/lib/danica/wrapper/number.rb +2 -1
- data/lib/danica/wrapper/plus_minus.rb +4 -4
- data/lib/danica/wrapper/variable.rb +8 -8
- data/spec/integration/readme/constant_spec.rb +1 -1
- data/spec/integration/readme/function_spec.rb +2 -2
- data/spec/integration/readme/variables_spec.rb +2 -2
- data/spec/lib/danica/common_spec.rb +44 -6
- data/spec/lib/danica/equation_spec.rb +2 -0
- data/spec/lib/danica/expressable_spec.rb +7 -0
- data/spec/lib/danica/expression/gauss_spec.rb +1 -1
- data/spec/lib/danica/formatted_spec.rb +142 -0
- data/spec/lib/danica/function/name_spec.rb +4 -2
- data/spec/lib/danica/function_spec.rb +4 -2
- data/spec/lib/danica/operator_spec.rb +6 -0
- data/spec/lib/danica/wrapper/constant_spec.rb +3 -3
- data/spec/lib/danica/wrapper/number_spec.rb +2 -30
- data/spec/lib/danica/wrapper/variable_spec.rb +1 -1
- data/spec/lib/danica/wrapper_spec.rb +1 -1
- data/spec/support/shared_examples/common.rb +19 -2
- data/spec/support/shared_examples/variable.rb +40 -5
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b307b4b7177fbe4174f87da3d4bcad37028c635c
|
4
|
+
data.tar.gz: ab3906ae623e2e99ce5223dffd5868bdac252a6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fd900f7a94701ef2717be6177b373e5065b153cfc412431abf3337a1b88636d28146280d298c189cb5d7fc2eca0c337a01331d7e964b4e66a0f1213eb4e47d7
|
7
|
+
data.tar.gz: 1b048a9de7ab0123ba587eae9ec651ff16b0e4e6fd5205aa476894ef8e55eafa8bbd9c87a6ad207985589d744bb1fe7e2da18fed09c882618e02d27f3bbeb3c2
|
data/README.md
CHANGED
@@ -250,8 +250,8 @@ end
|
|
250
250
|
fx = Danica::Function::Spatial.new(
|
251
251
|
time: :t,
|
252
252
|
acceleration: 'a',
|
253
|
-
initial_space: { name: :S0, latex: 'S_0',
|
254
|
-
initial_velocity: { name: :V0, latex: 'V_0',
|
253
|
+
initial_space: { name: :S0, latex: 'S_0', gnuplot: 'S0' },
|
254
|
+
initial_velocity: { name: :V0, latex: 'V_0', gnuplot: 'V0' }
|
255
255
|
)
|
256
256
|
```
|
257
257
|
|
@@ -511,7 +511,7 @@ Variables can also behave differently when converting to tex or gnu
|
|
511
511
|
|
512
512
|
```ruby
|
513
513
|
Danica::DSL.build do
|
514
|
-
variable(name: :frequency, latex: '\lambda',
|
514
|
+
variable(name: :frequency, latex: '\lambda', gnuplot: :f)
|
515
515
|
end
|
516
516
|
```
|
517
517
|
would produce different ```#to_tex``` and ```#to_gnu``` results (```\lambda``` and ```f``` respectvly)
|
@@ -520,7 +520,7 @@ Also, valued variables will always use their value on string representation
|
|
520
520
|
|
521
521
|
```ruby
|
522
522
|
Danica::DSL.build do
|
523
|
-
variable(name: :frequency, latex: '\lambda',
|
523
|
+
variable(name: :frequency, latex: '\lambda', gnuplot: :f, value: 2)
|
524
524
|
end
|
525
525
|
```
|
526
526
|
|
@@ -601,14 +601,57 @@ While variables with value have a numeric string representation, constants will
|
|
601
601
|
be represented by their string attribute
|
602
602
|
|
603
603
|
```ruby
|
604
|
-
Danica::Wrapper::Constant.new(
|
604
|
+
Danica::Wrapper::Constant.new(gnuplot: 'pi', latex: '\pi', value: 3.141592)
|
605
605
|
```
|
606
606
|
which will have the returns of ```#to(format)``` obeying the following
|
607
607
|
|
608
608
|
```ruby
|
609
609
|
{
|
610
610
|
tex: '\pi',
|
611
|
-
|
611
|
+
gnuplot: 'pi',
|
612
612
|
f: 3.141592
|
613
613
|
}
|
614
614
|
```
|
615
|
+
|
616
|
+
###Formatting
|
617
|
+
When generating the output, you can choose options or even
|
618
|
+
create a formatted object
|
619
|
+
|
620
|
+
#### decimals
|
621
|
+
define the float decimals
|
622
|
+
|
623
|
+
```ruby
|
624
|
+
value = 1 / 3.0
|
625
|
+
expression = Danica.build(:x) do
|
626
|
+
x + value
|
627
|
+
end
|
628
|
+
|
629
|
+
expression.to_tex(decimals: 3)
|
630
|
+
```
|
631
|
+
|
632
|
+
returns
|
633
|
+
|
634
|
+
```string
|
635
|
+
x + 0.333
|
636
|
+
```
|
637
|
+
|
638
|
+
#### Formatted
|
639
|
+
Any Danica object can be formatted previously returning a pre-formatted object
|
640
|
+
|
641
|
+
|
642
|
+
```ruby
|
643
|
+
value = 1 / 3.0
|
644
|
+
expression = Danica.build(:x) do
|
645
|
+
x + value
|
646
|
+
end
|
647
|
+
|
648
|
+
formatted = expression.tex(decimals: 3)
|
649
|
+
formatted.to_s
|
650
|
+
```
|
651
|
+
|
652
|
+
returns
|
653
|
+
|
654
|
+
```string
|
655
|
+
x + 0.333
|
656
|
+
```
|
657
|
+
|
data/lib/danica.rb
CHANGED
data/lib/danica/common.rb
CHANGED
@@ -18,33 +18,42 @@ module Danica
|
|
18
18
|
|
19
19
|
default_values :constant?, :signaled?, :container?, :variable?,
|
20
20
|
:variable_holder?, false
|
21
|
+
default_value :priority, 1
|
21
22
|
end
|
22
23
|
|
23
24
|
def to_f
|
24
25
|
raise Exception::NotImplemented
|
25
26
|
end
|
26
27
|
|
27
|
-
def to_tex
|
28
|
-
to(:tex)
|
28
|
+
def to_tex(**options)
|
29
|
+
to(:tex, options)
|
29
30
|
end
|
30
31
|
|
31
|
-
def to_gnu
|
32
|
-
to(:gnu)
|
32
|
+
def to_gnu(**options)
|
33
|
+
to(:gnu, options)
|
33
34
|
end
|
34
35
|
|
35
|
-
def to(format)
|
36
|
+
def to(format, **options)
|
36
37
|
case format.to_sym
|
37
38
|
when :tex
|
38
|
-
to_tex
|
39
|
+
to_tex(options)
|
39
40
|
when :gnu
|
40
|
-
to_gnu
|
41
|
+
to_gnu(options)
|
41
42
|
when :f
|
42
43
|
to_f
|
43
44
|
else
|
44
|
-
raise Exception::
|
45
|
+
raise Exception::FormattedNotFound.new
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
49
|
+
def tex(**options)
|
50
|
+
Formatted.new(self, :tex, options)
|
51
|
+
end
|
52
|
+
|
53
|
+
def gnu(**options)
|
54
|
+
Formatted.new(self, :gnu, options)
|
55
|
+
end
|
56
|
+
|
48
57
|
def valued?
|
49
58
|
to_f.present?
|
50
59
|
rescue Exception::NotDefined
|
data/lib/danica/equation.rb
CHANGED
data/lib/danica/exception.rb
CHANGED
data/lib/danica/expressable.rb
CHANGED
data/lib/danica/expression.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Danica
|
2
|
-
class Expression::Gauss < Expression.build(:x, average: { latex: '\mu',
|
2
|
+
class Expression::Gauss < Expression.build(:x, average: { latex: '\mu', gnuplot: :u }, variance_root: { latex: '\sigma', gnuplot: :v }) { num(1) / denominator * exponential(exp) }
|
3
3
|
|
4
4
|
private
|
5
5
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Danica::Formatted
|
2
|
+
attr_reader :content, :format, :decimals
|
3
|
+
|
4
|
+
def initialize(content, format, decimals: nil)
|
5
|
+
@content = content
|
6
|
+
@format = format
|
7
|
+
@decimals = decimals
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
content.to(format, decimals: decimals)
|
12
|
+
end
|
13
|
+
|
14
|
+
def ==(other)
|
15
|
+
return false unless other.class == self.class
|
16
|
+
return other.content == content &&
|
17
|
+
other.format == format
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def method_missing(method, *args)
|
23
|
+
value = content.public_send(method, *args)
|
24
|
+
return value unless value.is_a?(Danica::Common)
|
25
|
+
self.class.new(
|
26
|
+
value,
|
27
|
+
format
|
28
|
+
)
|
29
|
+
end
|
30
|
+
end
|
data/lib/danica/function/name.rb
CHANGED
@@ -8,8 +8,8 @@ module Danica
|
|
8
8
|
@containers = variables.map { |v| wrap_value(v) }
|
9
9
|
end
|
10
10
|
|
11
|
-
def to(
|
12
|
-
"#{name}(#{description_variables(
|
11
|
+
def to(*args)
|
12
|
+
"#{name}(#{description_variables(*args)})"
|
13
13
|
end
|
14
14
|
|
15
15
|
def variables
|
@@ -18,8 +18,10 @@ module Danica
|
|
18
18
|
|
19
19
|
private
|
20
20
|
|
21
|
-
def description_variables(format)
|
22
|
-
variables_for(format).map
|
21
|
+
def description_variables(format, **options)
|
22
|
+
variables_for(format).map do |value|
|
23
|
+
value.to(format, options)
|
24
|
+
end.join(', ')
|
23
25
|
end
|
24
26
|
|
25
27
|
def variables_for(format)
|
@@ -14,8 +14,8 @@ module Danica
|
|
14
14
|
variables.include?(value.content)
|
15
15
|
end
|
16
16
|
|
17
|
-
def to(format)
|
18
|
-
extractor = string_extractor(format)
|
17
|
+
def to(format, **options)
|
18
|
+
extractor = string_extractor(format, **options)
|
19
19
|
variables.procedural_join(extractor, &join_proc(symbol(format)))
|
20
20
|
end
|
21
21
|
|
@@ -38,10 +38,10 @@ module Danica
|
|
38
38
|
proc { " #{symbol} " }
|
39
39
|
end
|
40
40
|
|
41
|
-
def string_extractor(
|
41
|
+
def string_extractor(*args)
|
42
42
|
proc do |parcel|
|
43
43
|
parcel = wrap_as_group(parcel)
|
44
|
-
parcel.to(
|
44
|
+
parcel.to(*args)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -8,12 +8,12 @@ module Danica
|
|
8
8
|
numerator.to_f / denominator.to_f
|
9
9
|
end
|
10
10
|
|
11
|
-
def to_tex
|
12
|
-
"\\frac{#{numerator.to_tex}}{#{denominator.to_tex}}"
|
11
|
+
def to_tex(**options)
|
12
|
+
"\\frac{#{numerator.to_tex(options)}}{#{denominator.to_tex(options)}}"
|
13
13
|
end
|
14
14
|
|
15
|
-
def to_gnu
|
16
|
-
"(#{numerator.to_gnu})/(#{denominator.to_gnu})"
|
15
|
+
def to_gnu(**options)
|
16
|
+
"(#{numerator.to_gnu(options)})/(#{denominator.to_gnu(options)})"
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -14,12 +14,12 @@ module Danica
|
|
14
14
|
Math.#{operator}(value.to_f)
|
15
15
|
end
|
16
16
|
|
17
|
-
def to_tex
|
18
|
-
'#{tex.gsub(':value:', "' + value.to_tex + '")}'
|
17
|
+
def to_tex(**options)
|
18
|
+
'#{tex.gsub(':value:', "' + value.to_tex(options) + '")}'
|
19
19
|
end
|
20
20
|
|
21
|
-
def to_gnu
|
22
|
-
'#{gnu.gsub(':value:', "' + value.to_gnu + '")}'
|
21
|
+
def to_gnu(**options)
|
22
|
+
'#{gnu.gsub(':value:', "' + value.to_gnu(options) + '")}'
|
23
23
|
end
|
24
24
|
))
|
25
25
|
end
|
@@ -7,12 +7,12 @@ module Danica
|
|
7
7
|
base.to_f ** exponent.to_f
|
8
8
|
end
|
9
9
|
|
10
|
-
def to_tex
|
11
|
-
"#{wrap_as_group(base).to_tex}^{#{exponent.to_tex}}"
|
10
|
+
def to_tex(**options)
|
11
|
+
"#{wrap_as_group(base).to_tex(options)}^{#{exponent.to_tex(options)}}"
|
12
12
|
end
|
13
13
|
|
14
|
-
def to_gnu
|
15
|
-
"#{ wrap_as_group(base).to_gnu}**(#{exponent.to_gnu})"
|
14
|
+
def to_gnu(**options)
|
15
|
+
"#{ wrap_as_group(base).to_gnu(options)}**(#{exponent.to_gnu(options)})"
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/danica/version.rb
CHANGED
data/lib/danica/wrapper.rb
CHANGED
@@ -3,7 +3,7 @@ module Danica
|
|
3
3
|
include BaseOperations
|
4
4
|
include Common
|
5
5
|
|
6
|
-
attr_reader :value, :latex, :
|
6
|
+
attr_reader :value, :latex, :gnuplot
|
7
7
|
|
8
8
|
default_value :priority, 10
|
9
9
|
default_value :valued?, true
|
@@ -12,7 +12,7 @@ module Danica
|
|
12
12
|
|
13
13
|
def initialize(*args)
|
14
14
|
attrs = args.extract_options!
|
15
|
-
attrs = args.as_hash(%i(value latex
|
15
|
+
attrs = args.as_hash(%i(value latex gnuplot)).merge(attrs)
|
16
16
|
|
17
17
|
attrs.each do |key, value|
|
18
18
|
self.send("#{key}=", value)
|
@@ -25,15 +25,15 @@ module Danica
|
|
25
25
|
|
26
26
|
def ==(other)
|
27
27
|
return false unless other.class == self.class
|
28
|
-
|
28
|
+
gnuplot == other.gnuplot && latex == other.latex && value == other.value
|
29
29
|
end
|
30
30
|
|
31
|
-
def to_tex
|
31
|
+
def to_tex(**_)
|
32
32
|
latex.to_s
|
33
33
|
end
|
34
34
|
|
35
|
-
def to_gnu
|
36
|
-
|
35
|
+
def to_gnu(**_)
|
36
|
+
gnuplot.to_s
|
37
37
|
end
|
38
38
|
|
39
39
|
private
|
@@ -46,8 +46,8 @@ module Danica
|
|
46
46
|
@latex = latex
|
47
47
|
end
|
48
48
|
|
49
|
-
def
|
50
|
-
@
|
49
|
+
def gnuplot=(gnuplot)
|
50
|
+
@gnuplot = gnuplot
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
data/lib/danica/wrapper/group.rb
CHANGED
@@ -14,12 +14,12 @@ module Danica
|
|
14
14
|
@value = wrap_value(value)
|
15
15
|
end
|
16
16
|
|
17
|
-
def to_tex
|
18
|
-
"\\left(#{value.to_tex}\\right)"
|
17
|
+
def to_tex(**options)
|
18
|
+
"\\left(#{value.to_tex(options)}\\right)"
|
19
19
|
end
|
20
20
|
|
21
|
-
def to_gnu
|
22
|
-
"(#{value.to_gnu})"
|
21
|
+
def to_gnu(**options)
|
22
|
+
"(#{value.to_gnu(options)})"
|
23
23
|
end
|
24
24
|
|
25
25
|
def ==(other)
|
@@ -19,12 +19,12 @@ module Danica
|
|
19
19
|
value.to_f
|
20
20
|
end
|
21
21
|
|
22
|
-
def to_tex
|
23
|
-
"\\pm #{wrap_as_group(value).to_tex}"
|
22
|
+
def to_tex(**options)
|
23
|
+
"\\pm #{wrap_as_group(value).to_tex(options)}"
|
24
24
|
end
|
25
25
|
|
26
|
-
def to_gnu
|
27
|
-
"+ #{wrap_as_group(value).to_gnu}"
|
26
|
+
def to_gnu(**options)
|
27
|
+
"+ #{wrap_as_group(value).to_gnu(options)}"
|
28
28
|
end
|
29
29
|
|
30
30
|
def ==(other)
|
@@ -3,7 +3,7 @@ module Danica
|
|
3
3
|
include BaseOperations
|
4
4
|
include Common
|
5
5
|
|
6
|
-
attr_accessor :value, :name, :latex, :
|
6
|
+
attr_accessor :value, :name, :latex, :gnuplot
|
7
7
|
|
8
8
|
default_value :priority, 10
|
9
9
|
default_value :is_grouped?, false
|
@@ -11,7 +11,7 @@ module Danica
|
|
11
11
|
|
12
12
|
def initialize(*args)
|
13
13
|
attrs = args.extract_options!
|
14
|
-
attrs = args.as_hash(%i(name value latex
|
14
|
+
attrs = args.as_hash(%i(name value latex gnuplot)).merge(attrs)
|
15
15
|
|
16
16
|
attrs.each do |key, value|
|
17
17
|
self.public_send("#{key}=", value)
|
@@ -27,17 +27,17 @@ module Danica
|
|
27
27
|
return other.value == value &&
|
28
28
|
other.name == name &&
|
29
29
|
other.latex == latex &&
|
30
|
-
other.
|
30
|
+
other.gnuplot == gnuplot
|
31
31
|
end
|
32
32
|
|
33
|
-
def to_tex
|
34
|
-
return value.to_tex if value
|
33
|
+
def to_tex(**options)
|
34
|
+
return value.to_tex(options) if value
|
35
35
|
(latex || name).to_s
|
36
36
|
end
|
37
37
|
|
38
|
-
def to_gnu
|
39
|
-
return value.to_gnu if value
|
40
|
-
(
|
38
|
+
def to_gnu(**options)
|
39
|
+
return value.to_gnu(options) if value
|
40
|
+
(gnuplot || name).to_s
|
41
41
|
end
|
42
42
|
|
43
43
|
def value=(value)
|
@@ -5,8 +5,8 @@ describe Danica::Function::Spatial do
|
|
5
5
|
described_class.new(
|
6
6
|
time: :t,
|
7
7
|
acceleration: 'a',
|
8
|
-
initial_space: { name: :S0, latex: 'S_0',
|
9
|
-
initial_velocity: { name: :V0, latex: 'V_0',
|
8
|
+
initial_space: { name: :S0, latex: 'S_0', gnuplot: 'S0' },
|
9
|
+
initial_velocity: { name: :V0, latex: 'V_0', gnuplot: 'V0' }
|
10
10
|
)
|
11
11
|
end
|
12
12
|
|
@@ -37,7 +37,7 @@ describe Danica::Wrapper::Variable do
|
|
37
37
|
context 'when variable has value' do
|
38
38
|
subject do
|
39
39
|
Danica::DSL.build do
|
40
|
-
variable(name: :frequency, latex: '\lambda',
|
40
|
+
variable(name: :frequency, latex: '\lambda', gnuplot: :f, value: 2)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -82,7 +82,7 @@ describe Danica::Wrapper::Variable do
|
|
82
82
|
describe 'custom outputs' do
|
83
83
|
subject do
|
84
84
|
Danica::DSL.build do
|
85
|
-
variable(name: :frequency, latex: '\lambda',
|
85
|
+
variable(name: :frequency, latex: '\lambda', gnuplot: :f)
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
@@ -5,19 +5,19 @@ module Danica
|
|
5
5
|
class Dummy
|
6
6
|
include Common
|
7
7
|
|
8
|
-
def to_tex
|
9
|
-
'tex'
|
8
|
+
def to_tex(**options)
|
9
|
+
options.empty? ? 'tex' : "tex #{options}"
|
10
10
|
end
|
11
11
|
|
12
|
-
def to_gnu
|
13
|
-
'gnu'
|
12
|
+
def to_gnu(**options)
|
13
|
+
options.empty? ? 'gnu' : "gnu #{options}"
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
class Dummy2
|
18
18
|
include Common
|
19
19
|
|
20
|
-
def to(format)
|
20
|
+
def to(format, **_)
|
21
21
|
"formatted: #{format}"
|
22
22
|
end
|
23
23
|
end
|
@@ -27,6 +27,7 @@ end
|
|
27
27
|
describe Danica::Common do
|
28
28
|
let(:clazz) { described_class::Dummy }
|
29
29
|
subject { clazz.new }
|
30
|
+
it_behaves_like 'an object that respond to basic_methods'
|
30
31
|
|
31
32
|
describe '#to_f' do
|
32
33
|
it do
|
@@ -62,7 +63,12 @@ describe Danica::Common do
|
|
62
63
|
it do
|
63
64
|
expect do
|
64
65
|
subject.to('format')
|
65
|
-
end.to raise_error(Danica::Exception::
|
66
|
+
end.to raise_error(Danica::Exception::FormattedNotFound)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
context 'when passing options' do
|
70
|
+
it 'passes the options ahead' do
|
71
|
+
expect(subject.to(:gnu, { opt: 1 })).to eq('gnu {:opt=>1}')
|
66
72
|
end
|
67
73
|
end
|
68
74
|
end
|
@@ -85,4 +91,36 @@ describe Danica::Common do
|
|
85
91
|
end
|
86
92
|
end
|
87
93
|
end
|
94
|
+
|
95
|
+
describe '#tex' do
|
96
|
+
it do
|
97
|
+
expect(subject.tex).to be_a(Danica::Formatted)
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'knows how to return a tex string' do
|
101
|
+
expect(subject.tex.to_s).to eq('tex {:decimals=>nil}')
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'when passing options' do
|
105
|
+
it 'uses the arguments' do
|
106
|
+
expect(subject.tex(decimals: 3).to_s).to eq('tex {:decimals=>3}')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '#gnu' do
|
112
|
+
it do
|
113
|
+
expect(subject.gnu).to be_a(Danica::Formatted)
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'knows how to return a gnu string' do
|
117
|
+
expect(subject.gnu.to_s).to eq('gnu {:decimals=>nil}')
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'when passing options' do
|
121
|
+
it 'uses the arguments' do
|
122
|
+
expect(subject.gnu(decimals: 3).to_s).to eq('gnu {:decimals=>3}')
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
88
126
|
end
|
@@ -3,11 +3,18 @@ require 'spec_helper'
|
|
3
3
|
class Danica::Expressable::Dummy
|
4
4
|
include Danica::Expressable
|
5
5
|
|
6
|
+
delegate :to, to: :the_block
|
7
|
+
|
6
8
|
built_with :the_block
|
7
9
|
end
|
8
10
|
|
9
11
|
describe Danica::Expressable do
|
10
12
|
let(:clazz) { described_class::Dummy }
|
13
|
+
subject do
|
14
|
+
clazz.create(:x) { x }
|
15
|
+
end
|
16
|
+
|
17
|
+
it_behaves_like 'an object that respond to basic_methods', ignore: %i(valued? container? is_grouped? priority)
|
11
18
|
|
12
19
|
describe '.build' do
|
13
20
|
it 'responds to build' do
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Danica::Formatted do
|
4
|
+
let(:content) { Danica::Wrapper::Variable.new(latex: :V, gnuplot: :v) }
|
5
|
+
let(:format) { :tex }
|
6
|
+
let(:options) { {} }
|
7
|
+
subject do
|
8
|
+
described_class.new(content, format, options)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#to_s' do
|
12
|
+
context 'when format is tex' do
|
13
|
+
it 'return the expected tex string' do
|
14
|
+
expect(subject.to_s).to eq('V')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when format is gnu' do
|
19
|
+
let(:format) { :gnu }
|
20
|
+
|
21
|
+
it 'return the expected gnu string' do
|
22
|
+
expect(subject.to_s).to eq('v')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when variable has numeric value' do
|
27
|
+
let(:content) { Danica::Wrapper::Number.new(1/3.0) }
|
28
|
+
|
29
|
+
it 'returns the formatted number' do
|
30
|
+
expect(subject.to_s).to eq('0.3333333333333333')
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'when passing decimals settings' do
|
34
|
+
let(:options) { { decimals: 4 } }
|
35
|
+
|
36
|
+
it 'returns the formatted number' do
|
37
|
+
expect(subject.to_s).to eq('0.3333')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'operators' do
|
44
|
+
describe '+' do
|
45
|
+
it do
|
46
|
+
expect(subject + 2).to be_a(described_class)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'keeps being able to parse format' do
|
50
|
+
expect((subject + 2).to_s).to eq('V + 2')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '*' do
|
55
|
+
it do
|
56
|
+
expect(subject * 2).to be_a(described_class)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'keeps being able to parse format' do
|
60
|
+
expect((subject * 2).to_s).to eq('V \cdot 2')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '-@' do
|
65
|
+
it do
|
66
|
+
expect(-subject).to be_a(described_class)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'keeps being able to parse format' do
|
70
|
+
expect((-subject).to_s).to eq('-V')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#to_f' do
|
76
|
+
let(:content) { Danica::Wrapper::Number.new(2) }
|
77
|
+
|
78
|
+
it do
|
79
|
+
expect(subject.to_f).to be_a(Numeric)
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'returns the number' do
|
83
|
+
expect(subject.to_f).to eq(2)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe '#to' do
|
88
|
+
it do
|
89
|
+
expect(subject.to(:tex)).to be_a(String)
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'returns the string' do
|
93
|
+
expect(subject.to(:tex)).to eq('V')
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe '#tex' do
|
98
|
+
it do
|
99
|
+
expect(subject.tex).to be_a(Danica::Formatted)
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'when original format is tex' do
|
103
|
+
it 'returns the tex string' do
|
104
|
+
expect(subject.tex.to_s).to eq('V')
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'returns similar object' do
|
108
|
+
expect(subject.tex).to eq(subject)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'when original format is gnu' do
|
113
|
+
let(:format) { :gnu }
|
114
|
+
it 'returns the tex string' do
|
115
|
+
expect(subject.tex.to_s).to eq('V')
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'returns a new format object' do
|
119
|
+
expect(subject.tex).not_to eq(subject)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe '#gnu' do
|
125
|
+
it do
|
126
|
+
expect(subject.gnu).to be_a(Danica::Formatted)
|
127
|
+
end
|
128
|
+
|
129
|
+
context 'when original format is tex' do
|
130
|
+
it 'returns the gnu string' do
|
131
|
+
expect(subject.gnu.to_s).to eq('v')
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'when original format is gnu' do
|
136
|
+
let(:format) { :gnu }
|
137
|
+
it 'returns the gnu string' do
|
138
|
+
expect(subject.gnu.to_s).to eq('v')
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Danica::Function::Name do
|
4
|
-
let(:x) { Danica::Wrapper::Variable.new(name: :x, latex: '\mu',
|
4
|
+
let(:x) { Danica::Wrapper::Variable.new(name: :x, latex: '\mu', gnuplot: 'u')}
|
5
5
|
let(:subject) { described_class.new(name: :f, variables: [x]) }
|
6
6
|
|
7
|
+
it_behaves_like 'an object that respond to basic_methods'
|
8
|
+
|
7
9
|
describe '#to_tex' do
|
8
10
|
it 'returns the name of the function with tex variables' do
|
9
11
|
expect(subject.to_tex).to eq('f(\mu)')
|
@@ -18,7 +20,7 @@ describe Danica::Function::Name do
|
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
21
|
-
describe '#
|
23
|
+
describe '#to_gnu' do
|
22
24
|
it 'returns the name of the function with tex variables' do
|
23
25
|
expect(subject.to_gnu).to eq('f(u)')
|
24
26
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
shared_examples 'a generically generated function' do
|
4
|
+
it_behaves_like 'an object that respond to basic_methods'
|
5
|
+
|
4
6
|
it 'returns a function class' do
|
5
7
|
expect(function.class.superclass).to eq(described_class)
|
6
8
|
end
|
@@ -192,7 +194,7 @@ describe Danica::Function do
|
|
192
194
|
|
193
195
|
context 'from a hash' do
|
194
196
|
let(:function) do
|
195
|
-
function_class.new(name: :f, x: { latex: '\pi',
|
197
|
+
function_class.new(name: :f, x: { latex: '\pi', gnuplot: 'pi', value: 3.14 })
|
196
198
|
end
|
197
199
|
|
198
200
|
it 'ignores the constant in the definition' do
|
@@ -244,7 +246,7 @@ describe Danica::Function do
|
|
244
246
|
|
245
247
|
context 'from a hash' do
|
246
248
|
let(:function) do
|
247
|
-
function_class.new(name: :f, x: { latex: '\pi',
|
249
|
+
function_class.new(name: :f, x: { latex: '\pi', gnuplot: 'pi', value: 3.14 })
|
248
250
|
end
|
249
251
|
|
250
252
|
it 'ignores the constant in the definition' do
|
@@ -2,6 +2,10 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
class Danica::Operator::Dummy < Danica::Operator
|
4
4
|
variables :a, :b
|
5
|
+
|
6
|
+
def to(*args)
|
7
|
+
a + b
|
8
|
+
end
|
5
9
|
end
|
6
10
|
|
7
11
|
describe Danica::Operator do
|
@@ -9,6 +13,8 @@ describe Danica::Operator do
|
|
9
13
|
let(:clazz) { described_class::Dummy }
|
10
14
|
subject { clazz.new(*variables) }
|
11
15
|
|
16
|
+
it_behaves_like 'an object that respond to basic_methods'
|
17
|
+
|
12
18
|
describe 'variables assignment' do
|
13
19
|
it 'assignes the variables tpo its places' do
|
14
20
|
expect(subject.a).to eq(Danica::Wrapper::Number.new(2))
|
@@ -44,7 +44,7 @@ describe Danica::Wrapper::Constant do
|
|
44
44
|
it do
|
45
45
|
expect do
|
46
46
|
subject.to('format')
|
47
|
-
end.to raise_error(Danica::Exception::
|
47
|
+
end.to raise_error(Danica::Exception::FormattedNotFound)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
@@ -62,11 +62,11 @@ describe Danica::Wrapper::Constant do
|
|
62
62
|
end
|
63
63
|
|
64
64
|
context 'when initializing from hash' do
|
65
|
-
subject { described_class.new(value: 2.5, latex: :M,
|
65
|
+
subject { described_class.new(value: 2.5, latex: :M, gnuplot: :m) }
|
66
66
|
|
67
67
|
it 'initialize normaly' do
|
68
68
|
expect do
|
69
|
-
described_class.new(value: 2.5, latex: :M,
|
69
|
+
described_class.new(value: 2.5, latex: :M, gnuplot: :m)
|
70
70
|
end.not_to raise_error
|
71
71
|
end
|
72
72
|
|
@@ -27,38 +27,10 @@ describe Danica::Wrapper::Number do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
describe '#to_tex' do
|
30
|
-
|
31
|
-
let(:value) { 10.0 }
|
32
|
-
|
33
|
-
it 'returns the value integer string' do
|
34
|
-
expect(subject.to_tex).to eq('10')
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context 'when value should be a float' do
|
39
|
-
let(:value) { 10.5 }
|
40
|
-
|
41
|
-
it 'returns the value float string' do
|
42
|
-
expect(subject.to_tex).to eq('10.5')
|
43
|
-
end
|
44
|
-
end
|
30
|
+
it_behaves_like 'a method that display the numeric value', :to_tex
|
45
31
|
end
|
46
32
|
|
47
33
|
describe '#to_gnu' do
|
48
|
-
|
49
|
-
let(:value) { 10.0 }
|
50
|
-
|
51
|
-
it 'returns the value integer string' do
|
52
|
-
expect(subject.to_gnu).to eq('10')
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'when value should be integer' do
|
57
|
-
let(:value) { 10.5 }
|
58
|
-
|
59
|
-
it 'returns the value integer string' do
|
60
|
-
expect(subject.to_gnu).to eq('10.5')
|
61
|
-
end
|
62
|
-
end
|
34
|
+
it_behaves_like 'a method that display the numeric value', :to_gnu
|
63
35
|
end
|
64
36
|
end
|
@@ -38,7 +38,7 @@ describe Danica::Wrapper do
|
|
38
38
|
|
39
39
|
context 'when value is a Hash' do
|
40
40
|
context 'but it is a constant' do
|
41
|
-
let(:value) { { value: 10, latex: :x,
|
41
|
+
let(:value) { { value: 10, latex: :x, gnuplot: :X } }
|
42
42
|
|
43
43
|
it do
|
44
44
|
expect(subject.wrapped_value.content).to be_a(Danica::Wrapper::Constant)
|
@@ -1,6 +1,23 @@
|
|
1
|
-
shared_examples 'an object that respond to basic_methods' do |ignore: [], methods: %i(to_f to_tex to_gnu priority valued?)|
|
1
|
+
shared_examples 'an object that respond to basic_methods' do |ignore: [], methods: %i(to_f to_tex to_gnu priority valued? container? variable? variable_holder?)|
|
2
2
|
(methods - ignore).each do |method|
|
3
3
|
it { expect(subject).to respond_to(method) }
|
4
4
|
end
|
5
|
-
end
|
6
5
|
|
6
|
+
it 'accepts option on tex format' do
|
7
|
+
expect do
|
8
|
+
subject.to_tex(decimals: 2)
|
9
|
+
end.not_to raise_error
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'accepts option on gnu format' do
|
13
|
+
expect do
|
14
|
+
subject.to_gnu(decimals: 2)
|
15
|
+
end.not_to raise_error
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'accepts option on to format' do
|
19
|
+
expect do
|
20
|
+
subject.to(:gnu, decimals: 2)
|
21
|
+
end.not_to raise_error
|
22
|
+
end
|
23
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
shared_examples 'a variable method to formated string' do |method, format|
|
2
2
|
let(:name) { :delta }
|
3
3
|
let(:value) { 10.0 }
|
4
|
-
let(:arguments) { { name: name, latex: '\delta',
|
4
|
+
let(:arguments) { { name: name, latex: '\delta', gnuplot: 'del' } }
|
5
5
|
subject { described_class.new(arguments) }
|
6
6
|
|
7
7
|
context "when #{format} is not defined" do
|
@@ -13,10 +13,7 @@ shared_examples 'a variable method to formated string' do |method, format|
|
|
13
13
|
|
14
14
|
context 'when value is defined' do
|
15
15
|
before { arguments[:value] = value }
|
16
|
-
|
17
|
-
it 'returns the value' do
|
18
|
-
expect(subject.public_send(method)).to eq('10')
|
19
|
-
end
|
16
|
+
it_behaves_like 'a method that display the numeric value', method
|
20
17
|
end
|
21
18
|
end
|
22
19
|
|
@@ -26,3 +23,41 @@ shared_examples 'a variable method to formated string' do |method, format|
|
|
26
23
|
end
|
27
24
|
end
|
28
25
|
end
|
26
|
+
|
27
|
+
shared_examples 'a method that display the numeric value' do |method|
|
28
|
+
context 'when value should be integer' do
|
29
|
+
let(:value) { 10.0 }
|
30
|
+
|
31
|
+
it 'returns the value integer string' do
|
32
|
+
expect(subject.public_send(method)).to eq('10')
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'and passing the decimals argument' do
|
36
|
+
it 'returns the value float string' do
|
37
|
+
expect(subject.public_send(method, decimals: 4)).to eq('10')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'when value should be a float' do
|
43
|
+
let(:value) { 10 / 3.0 }
|
44
|
+
|
45
|
+
it 'returns the value float string' do
|
46
|
+
expect(subject.public_send(method)).to eq('3.3333333333333335')
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'and passing the decimals argument' do
|
50
|
+
it 'returns the value float string' do
|
51
|
+
expect(subject.public_send(method, decimals: 4)).to eq('3.3333')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'but the number has less decimals' do
|
56
|
+
let(:value) { 10.5 }
|
57
|
+
|
58
|
+
it 'returns the value integer string' do
|
59
|
+
expect(subject.public_send(method, decimals: 4)).to eq('10.5')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: danica
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darthjee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -149,6 +149,7 @@ files:
|
|
149
149
|
- lib/danica/expressable.rb
|
150
150
|
- lib/danica/expression.rb
|
151
151
|
- lib/danica/expression/gauss.rb
|
152
|
+
- lib/danica/formatted.rb
|
152
153
|
- lib/danica/function.rb
|
153
154
|
- lib/danica/function/name.rb
|
154
155
|
- lib/danica/operator.rb
|
@@ -195,6 +196,7 @@ files:
|
|
195
196
|
- spec/lib/danica/expressable_spec.rb
|
196
197
|
- spec/lib/danica/expression/gauss_spec.rb
|
197
198
|
- spec/lib/danica/expression_spec.rb
|
199
|
+
- spec/lib/danica/formatted_spec.rb
|
198
200
|
- spec/lib/danica/function/name_spec.rb
|
199
201
|
- spec/lib/danica/function_spec.rb
|
200
202
|
- spec/lib/danica/operator/addition_spec.rb
|
@@ -278,6 +280,7 @@ test_files:
|
|
278
280
|
- spec/lib/danica/expressable_spec.rb
|
279
281
|
- spec/lib/danica/expression/gauss_spec.rb
|
280
282
|
- spec/lib/danica/expression_spec.rb
|
283
|
+
- spec/lib/danica/formatted_spec.rb
|
281
284
|
- spec/lib/danica/function/name_spec.rb
|
282
285
|
- spec/lib/danica/function_spec.rb
|
283
286
|
- spec/lib/danica/operator/addition_spec.rb
|