utc_rpn_calc 0.0.1 → 0.1.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.
- data/.travis.yml +6 -0
- data/Gemfile +2 -0
- data/README.md +16 -3
- data/bin/utc_rpn_calc +12 -0
- data/lib/utc_rpn_calc/calculator.rb +7 -3
- data/lib/utc_rpn_calc/error.rb +3 -0
- data/lib/utc_rpn_calc/version.rb +1 -1
- data/spec/bin/utc_rpn_calc_spec.rb +55 -0
- data/spec/{calculator_spec.rb → lib/calculator_spec.rb} +0 -0
- data/spec/{core_ext → lib/core_ext}/fixnum_spec.rb +0 -0
- data/spec/{core_ext → lib/core_ext}/string_spec.rb +0 -0
- data/spec/spec_helper.rb +3 -0
- metadata +17 -11
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
# UtcRpnCalc
|
2
2
|
|
3
|
-
|
3
|
+
[](http://badge.fury.io/rb/utc_rpn_calc)
|
4
|
+
[](https://travis-ci.org/colinrymer/utc_rpn_calc)
|
5
|
+
[](https://coveralls.io/r/colinrymer/utc_rpn_calc)
|
6
|
+
[](https://codeclimate.com/github/colinrymer/utc_rpn_calc)
|
7
|
+
[](https://gemnasium.com/colinrymer/utc_rpn_calc)
|
8
|
+
|
9
|
+
A simple Reverse Polish Notation (RPN) hexadecimal calculator.
|
10
|
+
It was written as a demonstration of the UTC IEEE CS coding challenge
|
11
|
+
specifications for February 2014.
|
4
12
|
|
5
13
|
## Installation
|
6
14
|
|
@@ -18,11 +26,16 @@ Or install it yourself as:
|
|
18
26
|
|
19
27
|
## Usage
|
20
28
|
|
21
|
-
|
29
|
+
Pass a string of digits and operators separated with spaces as command line arguments, e.g.
|
30
|
+
|
31
|
+
```
|
32
|
+
$ utc_rpn_calc 1 2 +
|
33
|
+
0003
|
34
|
+
```
|
22
35
|
|
23
36
|
## Contributing
|
24
37
|
|
25
|
-
1. Fork it ( http://github.com
|
38
|
+
1. Fork it ( http://github.com/colinrymer/utc_rpn_calc/fork )
|
26
39
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
40
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
41
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/bin/utc_rpn_calc
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), %w[.. lib])
|
4
|
+
require 'utc_rpn_calc'
|
5
|
+
|
6
|
+
input = ARGV.join(' ')
|
7
|
+
|
8
|
+
output = UtcRpnCalc::Calculator.new(input).calculate
|
9
|
+
|
10
|
+
print output
|
11
|
+
|
12
|
+
exit 1 if output == UtcRpnCalc::ERROR
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'utc_rpn_calc/core_ext/string'
|
2
2
|
require 'utc_rpn_calc/core_ext/fixnum'
|
3
3
|
|
4
|
+
require 'utc_rpn_calc/error'
|
5
|
+
|
4
6
|
module UtcRpnCalc
|
5
7
|
class Calculator
|
6
|
-
|
7
|
-
ERROR = "BLARGH!"
|
8
8
|
FFFF = "FFFF".hex
|
9
9
|
|
10
10
|
def initialize(input)
|
@@ -18,7 +18,7 @@ module UtcRpnCalc
|
|
18
18
|
process_input(input)
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
calculated_value.to_formatted_hex
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
@@ -31,6 +31,10 @@ module UtcRpnCalc
|
|
31
31
|
@stack.push(result(input))
|
32
32
|
end
|
33
33
|
|
34
|
+
def calculated_value
|
35
|
+
@stack.pop || 0
|
36
|
+
end
|
37
|
+
|
34
38
|
def result(input)
|
35
39
|
input.valid_number? ? input.hex : compute(input)
|
36
40
|
end
|
data/lib/utc_rpn_calc/version.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'utc_rpn_calc' do
|
4
|
+
|
5
|
+
describe 'exit codes' do
|
6
|
+
|
7
|
+
subject { `utc_rpn_calc #{input}`; $?.to_i }
|
8
|
+
|
9
|
+
describe 'zero exit code' do
|
10
|
+
|
11
|
+
context 'when no calculation' do
|
12
|
+
let(:input) { '' }
|
13
|
+
it { should eq(0) }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when valid calculation' do
|
17
|
+
let(:input) { '1 2 +' }
|
18
|
+
it { should eq(0) }
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'non-zero exit code' do
|
24
|
+
|
25
|
+
context 'when invalid calculation' do
|
26
|
+
let(:input) { '1 + 2' }
|
27
|
+
it { should_not eq(0) }
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'output' do
|
35
|
+
|
36
|
+
subject { `utc_rpn_calc #{input}` }
|
37
|
+
|
38
|
+
context 'when no calculation' do
|
39
|
+
let(:input) { '' }
|
40
|
+
it { should eq('0000') }
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when valid calculation' do
|
44
|
+
let(:input) { '1 2 +' }
|
45
|
+
it { should eq('0003') }
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when invalid calculation' do
|
49
|
+
let(:input) { '1 + 2' }
|
50
|
+
it { should eq(UtcRpnCalc::ERROR) }
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: utc_rpn_calc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -62,24 +62,29 @@ dependencies:
|
|
62
62
|
description: A simple RPN style calculator that operates on unsigned hex numbers
|
63
63
|
email:
|
64
64
|
- colin.rymer@gmail.com
|
65
|
-
executables:
|
65
|
+
executables:
|
66
|
+
- utc_rpn_calc
|
66
67
|
extensions: []
|
67
68
|
extra_rdoc_files: []
|
68
69
|
files:
|
69
70
|
- .gitignore
|
70
71
|
- .rspec
|
72
|
+
- .travis.yml
|
71
73
|
- Gemfile
|
72
74
|
- LICENSE.txt
|
73
75
|
- README.md
|
74
76
|
- Rakefile
|
77
|
+
- bin/utc_rpn_calc
|
75
78
|
- lib/utc_rpn_calc.rb
|
76
79
|
- lib/utc_rpn_calc/calculator.rb
|
77
80
|
- lib/utc_rpn_calc/core_ext/fixnum.rb
|
78
81
|
- lib/utc_rpn_calc/core_ext/string.rb
|
82
|
+
- lib/utc_rpn_calc/error.rb
|
79
83
|
- lib/utc_rpn_calc/version.rb
|
80
|
-
- spec/
|
81
|
-
- spec/
|
82
|
-
- spec/core_ext/
|
84
|
+
- spec/bin/utc_rpn_calc_spec.rb
|
85
|
+
- spec/lib/calculator_spec.rb
|
86
|
+
- spec/lib/core_ext/fixnum_spec.rb
|
87
|
+
- spec/lib/core_ext/string_spec.rb
|
83
88
|
- spec/spec_helper.rb
|
84
89
|
- utc_rpn_calc.gemspec
|
85
90
|
homepage: https://github.com/colinrymer/utc_rpn_calc
|
@@ -97,7 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
97
102
|
version: '0'
|
98
103
|
segments:
|
99
104
|
- 0
|
100
|
-
hash:
|
105
|
+
hash: 92536587959642505
|
101
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
107
|
none: false
|
103
108
|
requirements:
|
@@ -106,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
111
|
version: '0'
|
107
112
|
segments:
|
108
113
|
- 0
|
109
|
-
hash:
|
114
|
+
hash: 92536587959642505
|
110
115
|
requirements: []
|
111
116
|
rubyforge_project:
|
112
117
|
rubygems_version: 1.8.23
|
@@ -114,7 +119,8 @@ signing_key:
|
|
114
119
|
specification_version: 3
|
115
120
|
summary: A simple RPN style calculator that operates on unsigned hex numbers
|
116
121
|
test_files:
|
117
|
-
- spec/
|
118
|
-
- spec/
|
119
|
-
- spec/core_ext/
|
122
|
+
- spec/bin/utc_rpn_calc_spec.rb
|
123
|
+
- spec/lib/calculator_spec.rb
|
124
|
+
- spec/lib/core_ext/fixnum_spec.rb
|
125
|
+
- spec/lib/core_ext/string_spec.rb
|
120
126
|
- spec/spec_helper.rb
|