auom 0.2.0 → 0.3.0
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 +18 -0
- data/.rubocop.yml +1 -1
- data/Changelog.md +5 -0
- data/Gemfile +2 -0
- data/Rakefile +2 -0
- data/auom.gemspec +6 -4
- data/config/devtools.yml +2 -0
- data/config/flay.yml +1 -1
- data/config/reek.yml +96 -97
- data/config/rubocop.yml +3 -0
- data/lib/auom.rb +2 -1
- data/lib/auom/algebra.rb +2 -0
- data/lib/auom/equalization.rb +2 -2
- data/lib/auom/inspection.rb +15 -10
- data/lib/auom/relational.rb +6 -76
- data/lib/auom/unit.rb +6 -8
- data/spec/shared/incompatible_operation_behavior.rb +2 -0
- data/spec/shared/operation_behavior.rb +3 -0
- data/spec/shared/sunits_shared.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/auom/algebra_spec.rb +279 -0
- data/spec/unit/auom/{equalization/equality_operator_spec.rb → equalization_spec.rb} +2 -1
- data/spec/unit/auom/inspection_spec.rb +73 -0
- data/spec/unit/auom/relational_spec.rb +39 -0
- data/spec/unit/auom/unit_spec.rb +377 -0
- metadata +18 -57
- data/.circle.yml +0 -4
- data/TODO +0 -1
- data/spec/unit/auom/algebra/add_spec.rb +0 -57
- data/spec/unit/auom/algebra/divide_spec.rb +0 -83
- data/spec/unit/auom/algebra/multiply_spec.rb +0 -80
- data/spec/unit/auom/algebra/substract_spec.rb +0 -57
- data/spec/unit/auom/inspection/class_methods/prettify_unit_part_spec.rb +0 -29
- data/spec/unit/auom/inspection/inspect_spec.rb +0 -39
- data/spec/unit/auom/relational/greater_than_or_equal_to_predicate_spec.rb +0 -38
- data/spec/unit/auom/relational/greater_than_predicate_spec.rb +0 -38
- data/spec/unit/auom/relational/less_than_or_equal_to_predicate_spec.rb +0 -38
- data/spec/unit/auom/relational/less_than_predicate_spec.rb +0 -38
- data/spec/unit/auom/unit/assert_same_unit_spec.rb +0 -20
- data/spec/unit/auom/unit/class_methods/convert_spec.rb +0 -33
- data/spec/unit/auom/unit/class_methods/lookup_spec.rb +0 -19
- data/spec/unit/auom/unit/class_methods/new_spec.rb +0 -152
- data/spec/unit/auom/unit/class_methods/try_convert_spec.rb +0 -35
- data/spec/unit/auom/unit/class_methods/units_spec.rb +0 -9
- data/spec/unit/auom/unit/denominators_spec.rb +0 -14
- data/spec/unit/auom/unit/numerators_spec.rb +0 -14
- data/spec/unit/auom/unit/same_unit_predicate_spec.rb +0 -20
- data/spec/unit/auom/unit/scalar_spec.rb +0 -14
- data/spec/unit/auom/unit/unit +0 -0
- data/spec/unit/auom/unit/unit_spec.rb +0 -14
- data/spec/unit/auom/unit/unitless_predicate_spec.rb +0 -22
data/.circle.yml
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
describe AUOM::Algebra, '#add' do
|
2
|
-
subject { object.add(operand) }
|
3
|
-
|
4
|
-
let(:object) { AUOM::Unit.new(*arguments) }
|
5
|
-
|
6
|
-
context 'when unit is unitless' do
|
7
|
-
let(:arguments) { [1] }
|
8
|
-
|
9
|
-
context 'and operand is an Integer' do
|
10
|
-
let(:operand) { 2 }
|
11
|
-
|
12
|
-
it_should_behave_like 'an operation'
|
13
|
-
|
14
|
-
it { should eql(AUOM::Unit.new(3)) }
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'and operand is a unitless unit' do
|
18
|
-
let(:operand) { AUOM::Unit.new(2) }
|
19
|
-
|
20
|
-
it { should eql(AUOM::Unit.new(3)) }
|
21
|
-
end
|
22
|
-
|
23
|
-
context 'and operand is a unitful unit' do
|
24
|
-
let(:operand) { AUOM::Unit.new(2, :meter) }
|
25
|
-
|
26
|
-
it_should_behave_like 'an incompatible operation'
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'when unit is unitful' do
|
31
|
-
let(:arguments) { [1, :meter, :euro] }
|
32
|
-
|
33
|
-
context 'and operand is an Integer' do
|
34
|
-
let(:operand) { 2 }
|
35
|
-
|
36
|
-
it_should_behave_like 'an incompatible operation'
|
37
|
-
end
|
38
|
-
|
39
|
-
context 'and operand is a unitless unit' do
|
40
|
-
let(:operand) { AUOM::Unit.new(2) }
|
41
|
-
|
42
|
-
it_should_behave_like 'an incompatible operation'
|
43
|
-
end
|
44
|
-
|
45
|
-
context 'and operand is a incompatible unit' do
|
46
|
-
let(:operand) { AUOM::Unit.new(2, :euro) }
|
47
|
-
|
48
|
-
it_should_behave_like 'an incompatible operation'
|
49
|
-
end
|
50
|
-
|
51
|
-
context 'and operand is a compatible unit' do
|
52
|
-
let(:operand) { AUOM::Unit.new(2, :meter, :euro) }
|
53
|
-
|
54
|
-
it { should eql(AUOM::Unit.new(3, :meter, :euro)) }
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
describe AUOM::Algebra do
|
2
|
-
describe '#divide' do
|
3
|
-
subject { object.divide(operand) }
|
4
|
-
|
5
|
-
let(:object) { AUOM::Unit.new(*arguments) }
|
6
|
-
|
7
|
-
context 'with unitless unit' do
|
8
|
-
let(:arguments) { [4] }
|
9
|
-
|
10
|
-
context 'when operand is a fixnum' do
|
11
|
-
let(:operand) { 2 }
|
12
|
-
|
13
|
-
it_should_behave_like 'an operation'
|
14
|
-
|
15
|
-
it { should eql(AUOM::Unit.new(2)) }
|
16
|
-
end
|
17
|
-
|
18
|
-
context 'when operand is a unitless unit' do
|
19
|
-
let(:operand) { AUOM::Unit.new(2) }
|
20
|
-
|
21
|
-
it_should_behave_like 'an operation'
|
22
|
-
|
23
|
-
it { should eql(AUOM::Unit.new(2)) }
|
24
|
-
end
|
25
|
-
|
26
|
-
context 'when operand is a unitful unit' do
|
27
|
-
let(:operand) { AUOM::Unit.new(2, :meter) }
|
28
|
-
|
29
|
-
it_should_behave_like 'an operation'
|
30
|
-
|
31
|
-
it { should eql(AUOM::Unit.new(2, [], :meter)) }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context 'with unitful unit' do
|
36
|
-
let(:arguments) { [2, :meter] }
|
37
|
-
|
38
|
-
context 'when operand is a fixnum' do
|
39
|
-
let(:operand) { 1 }
|
40
|
-
|
41
|
-
it_should_behave_like 'an operation'
|
42
|
-
|
43
|
-
it { should eql(AUOM::Unit.new(2, :meter)) }
|
44
|
-
end
|
45
|
-
|
46
|
-
context 'when operand is a unitless unit' do
|
47
|
-
let(:operand) { AUOM::Unit.new(1) }
|
48
|
-
|
49
|
-
it_should_behave_like 'an operation'
|
50
|
-
|
51
|
-
it { should eql(AUOM::Unit.new(2, :meter)) }
|
52
|
-
end
|
53
|
-
|
54
|
-
context 'when operand is a unitful unit' do
|
55
|
-
|
56
|
-
context 'and units get added to denominator' do
|
57
|
-
let(:operand) { AUOM::Unit.new(1, :euro) }
|
58
|
-
|
59
|
-
it_should_behave_like 'an operation'
|
60
|
-
|
61
|
-
it { should eql(AUOM::Unit.new(2, :meter, :euro)) }
|
62
|
-
end
|
63
|
-
|
64
|
-
context 'and units get added to numerator' do
|
65
|
-
let(:operand) { AUOM::Unit.new(1, nil, :euro) }
|
66
|
-
|
67
|
-
it_should_behave_like 'an operation'
|
68
|
-
|
69
|
-
it { should eql(AUOM::Unit.new(2, %i[euro meter])) }
|
70
|
-
end
|
71
|
-
|
72
|
-
context 'and units cancel each other' do
|
73
|
-
let(:operand) { AUOM::Unit.new(1, :meter) }
|
74
|
-
|
75
|
-
it_should_behave_like 'an operation'
|
76
|
-
|
77
|
-
it { should eql(AUOM::Unit.new(2)) }
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
describe AUOM::Algebra, '#multiply' do
|
2
|
-
subject { object.multiply(operand) }
|
3
|
-
|
4
|
-
let(:object) { AUOM::Unit.new(*arguments) }
|
5
|
-
|
6
|
-
context 'with unitless unit' do
|
7
|
-
let(:arguments) { [2] }
|
8
|
-
|
9
|
-
context 'when operand is a fixnum' do
|
10
|
-
let(:operand) { 3 }
|
11
|
-
|
12
|
-
it_should_behave_like 'an operation'
|
13
|
-
|
14
|
-
it { should eql(AUOM::Unit.new(6)) }
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'when operand is a unitless unit' do
|
18
|
-
let(:operand) { AUOM::Unit.new(3) }
|
19
|
-
|
20
|
-
it_should_behave_like 'an operation'
|
21
|
-
|
22
|
-
it { should eql(AUOM::Unit.new(6)) }
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'when operand is a unitful unit' do
|
26
|
-
let(:operand) { AUOM::Unit.new(3, :meter) }
|
27
|
-
|
28
|
-
it_should_behave_like 'an operation'
|
29
|
-
|
30
|
-
it { should eql(AUOM::Unit.new(6, :meter)) }
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
context 'with unitful unit' do
|
35
|
-
let(:arguments) { [2, :meter, :kilogramm] }
|
36
|
-
|
37
|
-
context 'when operand is a fixnum' do
|
38
|
-
let(:operand) { 3 }
|
39
|
-
|
40
|
-
it_should_behave_like 'an operation'
|
41
|
-
|
42
|
-
it { should eql(AUOM::Unit.new(6, :meter, :kilogramm)) }
|
43
|
-
end
|
44
|
-
|
45
|
-
context 'when operand is a unitless unit' do
|
46
|
-
let(:operand) { AUOM::Unit.new(3) }
|
47
|
-
|
48
|
-
it_should_behave_like 'an operation'
|
49
|
-
|
50
|
-
it { should eql(AUOM::Unit.new(6, :meter, :kilogramm)) }
|
51
|
-
end
|
52
|
-
|
53
|
-
context 'when operand is a unitful unit' do
|
54
|
-
|
55
|
-
context 'and units get added to numerator' do
|
56
|
-
let(:operand) { AUOM::Unit.new(3, :meter) }
|
57
|
-
|
58
|
-
it_should_behave_like 'an operation'
|
59
|
-
|
60
|
-
it { should eql(AUOM::Unit.new(6, %i[meter meter], :kilogramm)) }
|
61
|
-
end
|
62
|
-
|
63
|
-
context 'and units get added to denominator' do
|
64
|
-
let(:operand) { AUOM::Unit.new(3, [], :euro) }
|
65
|
-
|
66
|
-
it_should_behave_like 'an operation'
|
67
|
-
|
68
|
-
it { should eql(AUOM::Unit.new(6, :meter, %i[euro kilogramm])) }
|
69
|
-
end
|
70
|
-
|
71
|
-
context 'and units cancel each other' do
|
72
|
-
let(:operand) { AUOM::Unit.new(3, [], :meter) }
|
73
|
-
|
74
|
-
it_should_behave_like 'an operation'
|
75
|
-
|
76
|
-
it { should eql(AUOM::Unit.new(6, [], :kilogramm)) }
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
describe AUOM::Algebra, '#subtract' do
|
2
|
-
subject { object.subtract(operand) }
|
3
|
-
|
4
|
-
let(:object) { AUOM::Unit.new(*arguments) }
|
5
|
-
|
6
|
-
context 'when unit is unitless' do
|
7
|
-
let(:arguments) { [1] }
|
8
|
-
|
9
|
-
context 'and operand is an Integer' do
|
10
|
-
let(:operand) { 1 }
|
11
|
-
|
12
|
-
it_should_behave_like 'an operation'
|
13
|
-
|
14
|
-
it { should eql(AUOM::Unit.new(0)) }
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'and operand is a unitless unit' do
|
18
|
-
let(:operand) { AUOM::Unit.new(1) }
|
19
|
-
|
20
|
-
it { should eql(AUOM::Unit.new(0)) }
|
21
|
-
end
|
22
|
-
|
23
|
-
context 'and operand is a unitful unit' do
|
24
|
-
let(:operand) { AUOM::Unit.new(1, :meter) }
|
25
|
-
|
26
|
-
it_should_behave_like 'an incompatible operation'
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'when unit is unitful' do
|
31
|
-
let(:arguments) { [1, :meter] }
|
32
|
-
|
33
|
-
context 'and operand is an Integer' do
|
34
|
-
let(:operand) { 1 }
|
35
|
-
|
36
|
-
it_should_behave_like 'an incompatible operation'
|
37
|
-
end
|
38
|
-
|
39
|
-
context 'and operand is a unitless unit' do
|
40
|
-
let(:operand) { AUOM::Unit.new(1) }
|
41
|
-
|
42
|
-
it_should_behave_like 'an incompatible operation'
|
43
|
-
end
|
44
|
-
|
45
|
-
context 'and operand is a incompatible unit' do
|
46
|
-
let(:operand) { AUOM::Unit.new(1, :euro) }
|
47
|
-
|
48
|
-
it_should_behave_like 'an incompatible operation'
|
49
|
-
end
|
50
|
-
|
51
|
-
context 'and operand is a compatible unit' do
|
52
|
-
let(:operand) { AUOM::Unit.new(1, :meter) }
|
53
|
-
|
54
|
-
it { should eql(AUOM::Unit.new(0, :meter)) }
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
describe AUOM::Inspection, '.prettify_unit_part' do
|
2
|
-
subject { object.prettify_unit_part(part) }
|
3
|
-
|
4
|
-
let(:object) { AUOM::Inspection }
|
5
|
-
|
6
|
-
context 'with simple part' do
|
7
|
-
let(:part) { [:meter] }
|
8
|
-
|
9
|
-
it { should eql('meter') }
|
10
|
-
end
|
11
|
-
|
12
|
-
context 'with mixed part' do
|
13
|
-
let(:part) { %i[meter euro] }
|
14
|
-
|
15
|
-
it { should eql('euro*meter') }
|
16
|
-
end
|
17
|
-
|
18
|
-
context 'with complex part' do
|
19
|
-
let(:part) { %i[meter meter euro] }
|
20
|
-
|
21
|
-
it { should eql('meter^2*euro') }
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'with very complex part' do
|
25
|
-
let(:part) { %i[meter meter euro euro kilogramm] }
|
26
|
-
|
27
|
-
it { should eql('euro^2*meter^2*kilogramm') }
|
28
|
-
end
|
29
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
describe AUOM::Inspection, '#inspect' do
|
2
|
-
subject { object.inspect }
|
3
|
-
|
4
|
-
let(:object) { AUOM::Unit.new(scalar, *unit) }
|
5
|
-
let(:unit) { [] }
|
6
|
-
|
7
|
-
context 'when scalar is exact in decimal' do
|
8
|
-
let(:scalar) { 1 }
|
9
|
-
|
10
|
-
it { should eql('<AUOM::Unit @scalar=1>') }
|
11
|
-
end
|
12
|
-
|
13
|
-
context 'when scalar is NOT exact in decimal' do
|
14
|
-
let(:scalar) { Rational(1, 2) }
|
15
|
-
|
16
|
-
it { should eql('<AUOM::Unit @scalar=~0.5000>') }
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'when has only numerator' do
|
20
|
-
let(:scalar) { Rational(1, 3) }
|
21
|
-
let(:unit) { [:meter] }
|
22
|
-
|
23
|
-
it { should eql('<AUOM::Unit @scalar=~0.3333 meter>') }
|
24
|
-
end
|
25
|
-
|
26
|
-
context 'when has only denominator' do
|
27
|
-
let(:scalar) { Rational(1, 3) }
|
28
|
-
let(:unit) { [[], :meter] }
|
29
|
-
|
30
|
-
it { should eql('<AUOM::Unit @scalar=~0.3333 1/meter>') }
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'when has numerator and denominator' do
|
34
|
-
let(:scalar) { Rational(1, 3) }
|
35
|
-
let(:unit) { %i[euro meter] }
|
36
|
-
|
37
|
-
it { should eql('<AUOM::Unit @scalar=~0.3333 euro/meter>') }
|
38
|
-
end
|
39
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
describe AUOM::Relational, '#greater_than_or_equal_to?' do
|
2
|
-
|
3
|
-
subject { object.greater_than_or_equal_to?(operand) }
|
4
|
-
|
5
|
-
let(:object) { AUOM::Unit.new(1, :meter) }
|
6
|
-
|
7
|
-
let(:operand) { AUOM::Unit.new(scalar, unit) }
|
8
|
-
|
9
|
-
context 'when operand unit is the same' do
|
10
|
-
|
11
|
-
let(:unit) { :meter }
|
12
|
-
|
13
|
-
context 'and operand scalar is less than receiver scalar' do
|
14
|
-
let(:scalar) { 0 }
|
15
|
-
|
16
|
-
it { should be(true) }
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'and operand scalar is equal to receiver scalar' do
|
20
|
-
let(:scalar) { 1 }
|
21
|
-
|
22
|
-
it { should be(true) }
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'and operand scalar is greater than receiver scalar' do
|
26
|
-
let(:scalar) { 2 }
|
27
|
-
|
28
|
-
it { should be(false) }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'when operand unit is not the same' do
|
33
|
-
let(:scalar) { 1 }
|
34
|
-
let(:unit) { :euro }
|
35
|
-
|
36
|
-
it_should_behave_like 'an incompatible operation'
|
37
|
-
end
|
38
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
describe AUOM::Relational, '#greater_than?' do
|
2
|
-
|
3
|
-
subject { object.greater_than?(operand) }
|
4
|
-
|
5
|
-
let(:object) { AUOM::Unit.new(1, :meter) }
|
6
|
-
|
7
|
-
let(:operand) { AUOM::Unit.new(scalar, unit) }
|
8
|
-
|
9
|
-
context 'when operand unit is the same' do
|
10
|
-
|
11
|
-
let(:unit) { :meter }
|
12
|
-
|
13
|
-
context 'and operand scalar is less than receiver scalar' do
|
14
|
-
let(:scalar) { 0 }
|
15
|
-
|
16
|
-
it { should be(true) }
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'and operand scalar is equal to receiver scalar' do
|
20
|
-
let(:scalar) { 1 }
|
21
|
-
|
22
|
-
it { should be(false) }
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'and operand scalar is greater than receiver scalar' do
|
26
|
-
let(:scalar) { 2 }
|
27
|
-
|
28
|
-
it { should be(false) }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'when operand unit is not the same' do
|
33
|
-
let(:scalar) { 1 }
|
34
|
-
let(:unit) { :euro }
|
35
|
-
|
36
|
-
it_should_behave_like 'an incompatible operation'
|
37
|
-
end
|
38
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
describe AUOM::Relational, '#less_than_or_equal_to?' do
|
2
|
-
|
3
|
-
subject { object.less_than_or_equal_to?(operand) }
|
4
|
-
|
5
|
-
let(:object) { AUOM::Unit.new(1, :meter) }
|
6
|
-
|
7
|
-
let(:operand) { AUOM::Unit.new(scalar, unit) }
|
8
|
-
|
9
|
-
context 'when operand unit is the same' do
|
10
|
-
|
11
|
-
let(:unit) { :meter }
|
12
|
-
|
13
|
-
context 'and operand scalar is less than receiver scalar' do
|
14
|
-
let(:scalar) { 0 }
|
15
|
-
|
16
|
-
it { should be(false) }
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'and operand scalar is equal to receiver scalar' do
|
20
|
-
let(:scalar) { 1 }
|
21
|
-
|
22
|
-
it { should be(true) }
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'and operand scalar is greater than receiver scalar' do
|
26
|
-
let(:scalar) { 2 }
|
27
|
-
|
28
|
-
it { should be(true) }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'when operand unit is not the same' do
|
33
|
-
let(:scalar) { 1 }
|
34
|
-
let(:unit) { :euro }
|
35
|
-
|
36
|
-
it_should_behave_like 'an incompatible operation'
|
37
|
-
end
|
38
|
-
end
|