bfrb 0.1.2 → 0.1.3

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/README.rdoc CHANGED
@@ -1,6 +1,8 @@
1
1
  = bfrb
2
2
 
3
- bfrb is a simple {brainfuck}[http://www.muppetlabs.com/~breadbox/bf] interpreter written in Ruby.
3
+ bfrb is a simple {brainfuck}[http://www.muppetlabs.com/~breadbox/bf] interpreter written in Ruby.
4
+ It's not the most robust code, but it does the job, and has handled all the example code I've managed to
5
+ throw at it.
4
6
 
5
7
  == Usage
6
8
 
@@ -20,13 +22,10 @@ Or, you can specify a file with the -f parameter:
20
22
  You can also start an interactive interpreter by running bfrb without any parameters
21
23
 
22
24
  % bfrb
23
-
24
- == Things To Do
25
-
26
- * Compiler
27
25
 
28
26
  == History
29
27
 
28
+ * 0.1.3 - Unmatched brace checks
30
29
  * 0.1.2 - Added unit tests
31
30
  * 0.1.1 - Added REPL.
32
31
  * 0.1.0 - Initial release. Allows running code passed in or from a file.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
data/bfrb.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bfrb}
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Chris ONeal"]
12
- s.date = %q{2011-06-06}
12
+ s.date = %q{2011-06-07}
13
13
  s.default_executable = %q{bfrb}
14
14
  s.description = %q{bfrb is a brainfuck interpreter written in Ruby.}
15
15
  s.email = %q{ctoneal@gmail.com}
data/bin/bfrb CHANGED
@@ -5,7 +5,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "bfrb.rb
5
5
  def usage
6
6
  puts "Usage:"
7
7
  puts "Start interactive evaluation: bfrb"
8
- puts "Pass code in as first command line parameter (in quotes): bfrb \",[.,]\""
8
+ puts "Pass code in as a command line parameter (in quotes): bfrb \",[.,]\""
9
9
  puts "Specify a file to read: bfrb -f test.bf"
10
10
  puts "View this message: bfrb -u"
11
11
  end
@@ -22,6 +22,7 @@ else
22
22
  usage
23
23
  when "-f"
24
24
  if ARGV.length > 1
25
+ puts "Attempting to run file #{ARGV[1]}"
25
26
  bfrb.load_file(ARGV[1])
26
27
  else
27
28
  puts "Invalid arguments"
@@ -27,7 +27,30 @@ module BfRb
27
27
  # run a given piece of code
28
28
  def run(code)
29
29
  @code += code
30
- evaluate_code
30
+ if check_for_matching_braces
31
+ evaluate_code
32
+ end
33
+ end
34
+
35
+ # checks the code to be run to make sure all braces match
36
+ def check_for_matching_braces
37
+ brace_counter = 0
38
+ @code.each_char do |char|
39
+ if char == "["
40
+ brace_counter += 1
41
+ elsif char == "]"
42
+ brace_counter -= 1
43
+ if brace_counter < 0
44
+ @output_stream.puts "Unmatched ]"
45
+ return false
46
+ end
47
+ end
48
+ end
49
+ if brace_counter > 0
50
+ @output_stream.puts "Unmatched ["
51
+ return false
52
+ end
53
+ return true
31
54
  end
32
55
 
33
56
  # evaluate each instruction in the current code
@@ -57,6 +80,7 @@ module BfRb
57
80
  when "."
58
81
  @output_stream.print current_memory.chr
59
82
  when ","
83
+ @output_stream.puts
60
84
  input = @input_stream.gets.getbyte(0)
61
85
  @memory.set(@memory_counter, input)
62
86
  when "["
@@ -69,6 +69,26 @@ module BfRb
69
69
  @interpreter.evaluate_instruction("]")
70
70
  assert_not_equal(initial_value, @interpreter.program_counter)
71
71
  end
72
+
73
+ should "inform the user if an unmatched [ exists" do
74
+ output, input = IO.pipe
75
+ @interpreter.output_stream = input
76
+ @interpreter.run("[")
77
+ input.close
78
+ value = output.gets.chomp
79
+ output.close
80
+ assert_equal("Unmatched [", value)
81
+ end
82
+
83
+ should "inform the user if an unmatched ] exists" do
84
+ output, input = IO.pipe
85
+ @interpreter.output_stream = input
86
+ @interpreter.run("]")
87
+ input.close
88
+ value = output.gets.chomp
89
+ output.close
90
+ assert_equal("Unmatched ]", value)
91
+ end
72
92
  end
73
93
 
74
94
  context "." do
@@ -80,7 +100,7 @@ module BfRb
80
100
  input.close
81
101
  value = output.getbyte
82
102
  output.close
83
- assert_equal(value, @interpreter.current_memory)
103
+ assert_equal(@interpreter.current_memory, value)
84
104
  end
85
105
  end
86
106
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bfrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-06-06 00:00:00.000000000 -05:00
12
+ date: 2011-06-07 00:00:00.000000000 -05:00
13
13
  default_executable: bfrb
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: shoulda
17
- requirement: &9363720 !ruby/object:Gem::Requirement
17
+ requirement: &8122260 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *9363720
25
+ version_requirements: *8122260
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: bundler
28
- requirement: &9362928 !ruby/object:Gem::Requirement
28
+ requirement: &8115360 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.0.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *9362928
36
+ version_requirements: *8115360
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: jeweler
39
- requirement: &9362280 !ruby/object:Gem::Requirement
39
+ requirement: &8096676 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.5.2
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *9362280
47
+ version_requirements: *8096676
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rcov
50
- requirement: &9361608 !ruby/object:Gem::Requirement
50
+ requirement: &8095140 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,7 +55,7 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *9361608
58
+ version_requirements: *8095140
59
59
  description: bfrb is a brainfuck interpreter written in Ruby.
60
60
  email: ctoneal@gmail.com
61
61
  executables:
@@ -93,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
93
  version: '0'
94
94
  segments:
95
95
  - 0
96
- hash: 624886557
96
+ hash: -645724511
97
97
  required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  none: false
99
99
  requirements: