omghax-einstein 0.1.1 → 0.2.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/Benchmarks.txt +48 -0
- data/History.txt +9 -0
- data/Manifest.txt +14 -21
- data/README.txt +1 -8
- data/Rakefile +26 -13
- data/einstein.gemspec +24 -0
- data/lib/einstein.rb +10 -41
- data/lib/einstein/evaluator.rb +102 -0
- data/lib/einstein/expression.rb +37 -0
- data/lib/einstein/parser.racc +41 -0
- data/lib/einstein/parser.racc.rb +333 -0
- data/lib/einstein/parser.rex +42 -0
- data/lib/einstein/parser.rex.rb +101 -0
- data/lib/einstein/pretty_printer.rb +98 -0
- data/lib/einstein/processor.rb +12 -0
- data/lib/einstein/version.rb +3 -3
- data/tasks/benchmark.rake +28 -0
- data/test/helper.rb +2 -1
- data/test/test_einstein.rb +20 -0
- data/test/test_evaluator.rb +86 -0
- data/test/test_parser.rb +35 -30
- data/test/test_pretty_printer.rb +81 -0
- metadata +31 -31
- data/config/hoe.rb +0 -62
- data/config/requirements.rb +0 -17
- data/lib/einstein/generated_parser.rb +0 -337
- data/lib/einstein/nodes.rb +0 -155
- data/lib/einstein/parser.rb +0 -60
- data/lib/einstein/tokenizer.rb +0 -112
- data/lib/einstein/visitors.rb +0 -303
- data/lib/parser.y +0 -79
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/script/txt2html +0 -74
- data/tasks/deployment.rake +0 -34
- data/tasks/environment.rake +0 -7
- data/tasks/website.rake +0 -17
- data/test/test_evaluate.rb +0 -127
- data/test/test_pretty_print.rb +0 -119
- data/test/test_tokenizer.rb +0 -68
- data/website/index.html +0 -120
- data/website/index.txt +0 -58
- data/website/javascripts/rounded_corners_lite.inc.js +0 -285
- data/website/stylesheets/screen.css +0 -138
- data/website/template.rhtml +0 -48
data/lib/parser.y
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/* vim: set filetype=racc : */
|
|
2
|
-
|
|
3
|
-
class Einstein::GeneratedParser
|
|
4
|
-
|
|
5
|
-
/* Punctuators */
|
|
6
|
-
token LSHIFT /* << */
|
|
7
|
-
token RSHIFT /* >> */
|
|
8
|
-
token RAISE /* ** */
|
|
9
|
-
|
|
10
|
-
/* Terminal types */
|
|
11
|
-
token NUMBER
|
|
12
|
-
token IDENT
|
|
13
|
-
|
|
14
|
-
rule
|
|
15
|
-
Statement:
|
|
16
|
-
BitwiseOrExpr
|
|
17
|
-
;
|
|
18
|
-
|
|
19
|
-
Literal:
|
|
20
|
-
NUMBER { result = NumberNode.new(val.first) }
|
|
21
|
-
;
|
|
22
|
-
|
|
23
|
-
PrimaryExpr:
|
|
24
|
-
"(" Statement ")" { result = val[1] }
|
|
25
|
-
| IDENT { result = ResolveNode.new(val.first) }
|
|
26
|
-
| Literal
|
|
27
|
-
;
|
|
28
|
-
|
|
29
|
-
UnaryExpr:
|
|
30
|
-
PrimaryExpr
|
|
31
|
-
| "+" UnaryExpr { result = UnaryPlusNode.new(val[1]) }
|
|
32
|
-
| "-" UnaryExpr { result = UnaryMinusNode.new(val[1]) }
|
|
33
|
-
| "~" UnaryExpr { result = BitwiseNotNode.new(val[1]) }
|
|
34
|
-
;
|
|
35
|
-
|
|
36
|
-
ExponentExpr:
|
|
37
|
-
UnaryExpr
|
|
38
|
-
| ExponentExpr RAISE UnaryExpr { result = ExponentNode.new(val[0], val[2]) }
|
|
39
|
-
;
|
|
40
|
-
|
|
41
|
-
MultiplicativeExpr:
|
|
42
|
-
ExponentExpr
|
|
43
|
-
| MultiplicativeExpr "*" ExponentExpr { result = MultiplyNode.new(val[0], val[2]) }
|
|
44
|
-
| MultiplicativeExpr "/" ExponentExpr { result = DivideNode.new(val[0], val[2]) }
|
|
45
|
-
| MultiplicativeExpr "%" ExponentExpr { result = ModulusNode.new(val[0], val[2]) }
|
|
46
|
-
;
|
|
47
|
-
|
|
48
|
-
AdditiveExpr:
|
|
49
|
-
MultiplicativeExpr
|
|
50
|
-
| AdditiveExpr "+" MultiplicativeExpr { result = AddNode.new(val[0], val[2]) }
|
|
51
|
-
| AdditiveExpr "-" MultiplicativeExpr { result = SubtractNode.new(val[0], val[2]) }
|
|
52
|
-
;
|
|
53
|
-
|
|
54
|
-
ShiftExpr:
|
|
55
|
-
AdditiveExpr
|
|
56
|
-
| ShiftExpr LSHIFT AdditiveExpr { result = LeftShiftNode.new(val[0], val[2]) }
|
|
57
|
-
| ShiftExpr RSHIFT AdditiveExpr { result = RightShiftNode.new(val[0], val[2]) }
|
|
58
|
-
;
|
|
59
|
-
|
|
60
|
-
BitwiseAndExpr:
|
|
61
|
-
ShiftExpr
|
|
62
|
-
| BitwiseAndExpr "&" ShiftExpr { result = BitwiseAndNode.new(val[0], val[2]) }
|
|
63
|
-
;
|
|
64
|
-
|
|
65
|
-
BitwiseXorExpr:
|
|
66
|
-
BitwiseAndExpr
|
|
67
|
-
| BitwiseXorExpr "^" BitwiseAndExpr { result = BitwiseXorNode.new(val[0], val[2]) }
|
|
68
|
-
;
|
|
69
|
-
|
|
70
|
-
BitwiseOrExpr:
|
|
71
|
-
BitwiseXorExpr
|
|
72
|
-
| BitwiseOrExpr "|" BitwiseXorExpr { result = BitwiseOrNode.new(val[0], val[2]) }
|
|
73
|
-
;
|
|
74
|
-
|
|
75
|
-
---- header
|
|
76
|
-
require "einstein/nodes"
|
|
77
|
-
|
|
78
|
-
---- inner
|
|
79
|
-
include Einstein::Nodes
|
data/script/destroy
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
3
|
-
|
|
4
|
-
begin
|
|
5
|
-
require 'rubigen'
|
|
6
|
-
rescue LoadError
|
|
7
|
-
require 'rubygems'
|
|
8
|
-
require 'rubigen'
|
|
9
|
-
end
|
|
10
|
-
require 'rubigen/scripts/destroy'
|
|
11
|
-
|
|
12
|
-
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
|
13
|
-
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
|
14
|
-
RubiGen::Scripts::Destroy.new.run(ARGV)
|
data/script/generate
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
3
|
-
|
|
4
|
-
begin
|
|
5
|
-
require 'rubigen'
|
|
6
|
-
rescue LoadError
|
|
7
|
-
require 'rubygems'
|
|
8
|
-
require 'rubigen'
|
|
9
|
-
end
|
|
10
|
-
require 'rubigen/scripts/generate'
|
|
11
|
-
|
|
12
|
-
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
|
13
|
-
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
|
14
|
-
RubiGen::Scripts::Generate.new.run(ARGV)
|
data/script/txt2html
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
require 'rubygems'
|
|
4
|
-
begin
|
|
5
|
-
require 'newgem'
|
|
6
|
-
rescue LoadError
|
|
7
|
-
puts "\n\nGenerating the website requires the newgem RubyGem"
|
|
8
|
-
puts "Install: gem install newgem\n\n"
|
|
9
|
-
exit(1)
|
|
10
|
-
end
|
|
11
|
-
require 'redcloth'
|
|
12
|
-
require 'syntax/convertors/html'
|
|
13
|
-
require 'erb'
|
|
14
|
-
require File.dirname(__FILE__) + '/../lib/einstein/version.rb'
|
|
15
|
-
|
|
16
|
-
version = Einstein::VERSION::STRING
|
|
17
|
-
download = 'http://rubyforge.org/projects/einstein'
|
|
18
|
-
|
|
19
|
-
class Fixnum
|
|
20
|
-
def ordinal
|
|
21
|
-
# teens
|
|
22
|
-
return 'th' if (10..19).include?(self % 100)
|
|
23
|
-
# others
|
|
24
|
-
case self % 10
|
|
25
|
-
when 1: return 'st'
|
|
26
|
-
when 2: return 'nd'
|
|
27
|
-
when 3: return 'rd'
|
|
28
|
-
else return 'th'
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
class Time
|
|
34
|
-
def pretty
|
|
35
|
-
return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def convert_syntax(syntax, source)
|
|
40
|
-
return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
if ARGV.length >= 1
|
|
44
|
-
src, template = ARGV
|
|
45
|
-
template ||= File.join(File.dirname(__FILE__), '/../website/template.rhtml')
|
|
46
|
-
|
|
47
|
-
else
|
|
48
|
-
puts("Usage: #{File.split($0).last} source.txt [template.rhtml] > output.html")
|
|
49
|
-
exit!
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
template = ERB.new(File.open(template).read)
|
|
53
|
-
|
|
54
|
-
title = nil
|
|
55
|
-
body = nil
|
|
56
|
-
File.open(src) do |fsrc|
|
|
57
|
-
title_text = fsrc.readline
|
|
58
|
-
body_text = fsrc.read
|
|
59
|
-
syntax_items = []
|
|
60
|
-
body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</\1>!m){
|
|
61
|
-
ident = syntax_items.length
|
|
62
|
-
element, syntax, source = $1, $2, $3
|
|
63
|
-
syntax_items << "<#{element} class='syntax'>#{convert_syntax(syntax, source)}</#{element}>"
|
|
64
|
-
"syntax-temp-#{ident}"
|
|
65
|
-
}
|
|
66
|
-
title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
|
|
67
|
-
body = RedCloth.new(body_text).to_html
|
|
68
|
-
body.gsub!(%r!(?:<pre><code>)?syntax-temp-(\d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
|
|
69
|
-
end
|
|
70
|
-
stat = File.stat(src)
|
|
71
|
-
created = stat.ctime
|
|
72
|
-
modified = stat.mtime
|
|
73
|
-
|
|
74
|
-
$stdout << template.result(binding)
|
data/tasks/deployment.rake
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
desc 'Release the website and new gem version'
|
|
2
|
-
task :deploy => [:check_version, :website, :release] do
|
|
3
|
-
puts "Remember to create SVN tag:"
|
|
4
|
-
puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
|
|
5
|
-
"svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
|
|
6
|
-
puts "Suggested comment:"
|
|
7
|
-
puts "Tagging release #{CHANGES}"
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
|
|
11
|
-
task :local_deploy => [:website_generate, :install_gem]
|
|
12
|
-
|
|
13
|
-
task :check_version do
|
|
14
|
-
unless ENV['VERSION']
|
|
15
|
-
puts 'Must pass a VERSION=x.y.z release version'
|
|
16
|
-
exit
|
|
17
|
-
end
|
|
18
|
-
unless ENV['VERSION'] == VERS
|
|
19
|
-
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
|
20
|
-
exit
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
|
|
25
|
-
task :install_gem_no_doc => [:clean, :package] do
|
|
26
|
-
sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
namespace :manifest do
|
|
30
|
-
desc 'Recreate Manifest.txt to include ALL files'
|
|
31
|
-
task :refresh do
|
|
32
|
-
`rake check_manifest | patch -p0 > Manifest.txt`
|
|
33
|
-
end
|
|
34
|
-
end
|
data/tasks/environment.rake
DELETED
data/tasks/website.rake
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
desc 'Generate website files'
|
|
2
|
-
task :website_generate => :ruby_env do
|
|
3
|
-
(Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
|
|
4
|
-
sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
|
|
5
|
-
end
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
desc 'Upload website files to rubyforge'
|
|
9
|
-
task :website_upload do
|
|
10
|
-
host = "#{rubyforge_username}@rubyforge.org"
|
|
11
|
-
remote_dir = "/var/www/gforge-projects/#{PATH}/"
|
|
12
|
-
local_dir = 'website'
|
|
13
|
-
sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
desc 'Generate and upload website files'
|
|
17
|
-
task :website => [:website_generate, :website_upload, :publish_docs]
|
data/test/test_evaluate.rb
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
require "logger"
|
|
3
|
-
|
|
4
|
-
class TestEvaluate < Test::Unit::TestCase
|
|
5
|
-
def setup
|
|
6
|
-
@parser = Einstein::Parser.new
|
|
7
|
-
@parser.logger = Logger.new(STDERR)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def test_parentheses
|
|
11
|
-
assert_equal((5 + 2) * (10 - 5), parse("(5 + 2) * (10 - 5)").evaluate)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def test_order_of_operations
|
|
15
|
-
assert_equal(3 + 4 * 2, parse("3 + 4 * 2").evaluate)
|
|
16
|
-
assert_equal(7 + 9 * 2 - 16 / 8, parse("7 + 9 * 2 - 16 / 8").evaluate)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def test_resolve_should_raise_on_undefined_variable
|
|
20
|
-
assert_raises(Einstein::ResolveError) { parse("x").evaluate }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def test_resolve
|
|
24
|
-
assert_equal(5, parse("x").evaluate(:x => 5))
|
|
25
|
-
assert_equal(5 + 5, parse("x + 5").evaluate(:x => 5))
|
|
26
|
-
assert_equal(4 * 4, parse("x * 4").evaluate(:x => 4))
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def test_bitwise_or
|
|
30
|
-
assert_equal(0b1100 | 0b1111, parse("0b1100 | 0b1111").evaluate)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def test_bitwise_xor
|
|
34
|
-
assert_equal(0b1100 ^ 0b1111, parse("0b1100 ^ 0b1111").evaluate)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def test_bitwise_and
|
|
38
|
-
assert_equal(0b1100 & 0b1111, parse("0b1100 & 0b1111").evaluate)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def test_rshift
|
|
42
|
-
assert_equal(10 >> 2, parse("10 >> 2").evaluate)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def test_lshift
|
|
46
|
-
assert_equal(10 << 2, parse("10 << 2").evaluate)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def test_subtraction
|
|
50
|
-
assert_equal(10 - 5, parse("10 - 5").evaluate)
|
|
51
|
-
assert_equal(5 - 10, parse("5 - 10").evaluate)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def test_addition
|
|
55
|
-
assert_equal(1 + 2, parse("1 + 2").evaluate)
|
|
56
|
-
assert_equal(1.0 + 2.0, parse("1.0 + 2.0").evaluate)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def test_modulus
|
|
60
|
-
assert_equal(5 % 10, parse("5 % 10").evaluate)
|
|
61
|
-
assert_equal(10 % 5, parse("10 % 5").evaluate)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def test_division_should_raise_on_divide_by_zero
|
|
65
|
-
assert_raises(Einstein::ZeroDivisionError) { parse("1 / 0").evaluate }
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def test_division
|
|
69
|
-
assert_equal(10 / 5, parse("10 / 5").evaluate)
|
|
70
|
-
assert_equal(10.0 / 5.0, parse("10.0 / 5.0").evaluate)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def test_multiplication
|
|
74
|
-
assert_equal(5 * 10, parse("5 * 10").evaluate)
|
|
75
|
-
assert_equal(5.0 * 10.0, parse("5.0 * 10.0").evaluate)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def test_exponent
|
|
79
|
-
assert_equal(5 ** 2, parse("5 ** 2").evaluate)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def test_float
|
|
83
|
-
assert_equal(1.1, parse("1.1").evaluate)
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def test_number_base2
|
|
87
|
-
assert_equal(0b0, parse("0b0").evaluate)
|
|
88
|
-
assert_equal(0b1111, parse("0b1111").evaluate)
|
|
89
|
-
assert_equal(0B1010, parse("0B1010").evaluate)
|
|
90
|
-
|
|
91
|
-
assert_equal(+0b1111, parse("+0b1111").evaluate)
|
|
92
|
-
assert_equal(+0B1010, parse("+0B1010").evaluate)
|
|
93
|
-
|
|
94
|
-
assert_equal(-0b1111, parse("-0b1111").evaluate)
|
|
95
|
-
assert_equal(-0B1010, parse("-0B1010").evaluate)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def test_number_base16
|
|
99
|
-
assert_equal(0x0, parse("0x0").evaluate)
|
|
100
|
-
assert_equal(0xff, parse("0xff").evaluate)
|
|
101
|
-
assert_equal(0XFF, parse("0XFF").evaluate)
|
|
102
|
-
|
|
103
|
-
assert_equal(+0xff, parse("+0xff").evaluate)
|
|
104
|
-
assert_equal(+0XFF, parse("+0XFF").evaluate)
|
|
105
|
-
|
|
106
|
-
assert_equal(-0xff, parse("-0xff").evaluate)
|
|
107
|
-
assert_equal(-0XFF, parse("-0XFF").evaluate)
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def test_number_base10
|
|
111
|
-
assert_equal(0, parse("0").evaluate)
|
|
112
|
-
assert_equal(1, parse("01").evaluate)
|
|
113
|
-
assert_equal(10, parse("10").evaluate)
|
|
114
|
-
|
|
115
|
-
assert_equal(+1, parse("+1").evaluate)
|
|
116
|
-
assert_equal(+10, parse("+10").evaluate)
|
|
117
|
-
|
|
118
|
-
assert_equal(-1, parse("-1").evaluate)
|
|
119
|
-
assert_equal(-10, parse("-10").evaluate)
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
private
|
|
123
|
-
|
|
124
|
-
def parse(stmt)
|
|
125
|
-
@parser.parse(stmt)
|
|
126
|
-
end
|
|
127
|
-
end
|
data/test/test_pretty_print.rb
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
require "logger"
|
|
3
|
-
|
|
4
|
-
class TestPrettyPrint < Test::Unit::TestCase
|
|
5
|
-
def setup
|
|
6
|
-
@parser = Einstein::Parser.new
|
|
7
|
-
@parser.logger = Logger.new(STDERR)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def test_parentheses
|
|
11
|
-
assert_equal "((5 + 2) * (10 - 5))", parse("(5 + 2) * (10 - 5)").inspect
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def test_order_of_operations
|
|
15
|
-
assert_equal "(3 + (4 * 2))", parse("3 + 4 * 2").inspect
|
|
16
|
-
assert_equal "((7 + (9 * 2)) - (16 / 8))", parse("7 + 9 * 2 - 16 / 8").inspect
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def test_resolve
|
|
20
|
-
assert_equal "x", parse("x").inspect
|
|
21
|
-
assert_equal "(x + 5)", parse("x + 5").inspect
|
|
22
|
-
assert_equal "(x * 4)", parse("x * 4").inspect
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def test_bitwise_or
|
|
26
|
-
assert_equal "(12 | 15)", parse("0b1100 | 0b1111").inspect
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def test_bitwise_xor
|
|
30
|
-
assert_equal "(12 ^ 15)", parse("0b1100 ^ 0b1111").inspect
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def test_bitwise_and
|
|
34
|
-
assert_equal "(12 & 15)", parse("0b1100 & 0b1111").inspect
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def test_rshift
|
|
38
|
-
assert_equal("(10 >> 2)", parse("10 >> 2").inspect)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def test_lshift
|
|
42
|
-
assert_equal("(10 << 2)", parse("10 << 2").inspect)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def test_subtraction
|
|
46
|
-
assert_equal "(10 - 5)", parse("10 - 5").inspect
|
|
47
|
-
assert_equal "(5 - 10)", parse("5 - 10").inspect
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def test_addition
|
|
51
|
-
assert_equal "(1 + 2)", parse("1 + 2").inspect
|
|
52
|
-
assert_equal "(1.0 + 2.0)", parse("1.0 + 2.0").inspect
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def test_modulus
|
|
56
|
-
assert_equal "(5 % 10)", parse("5 % 10").inspect
|
|
57
|
-
assert_equal "(10 % 5)", parse("10 % 5").inspect
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def test_division
|
|
61
|
-
assert_equal "(10 / 5)", parse("10 / 5").inspect
|
|
62
|
-
assert_equal "(10.0 / 5.0)", parse("10.0 / 5.0").inspect
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def test_multiplication
|
|
66
|
-
assert_equal "(5 * 10)", parse("5 * 10").inspect
|
|
67
|
-
assert_equal "(5.0 * 10.0)", parse("5.0 * 10.0").inspect
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def test_exponent
|
|
71
|
-
assert_equal "(5 ** 2)", parse("5 ** 2").inspect
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def test_float
|
|
75
|
-
assert_equal "1.1", parse("1.1").inspect
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def test_number_base2
|
|
79
|
-
assert_equal "0", parse("0b0").inspect
|
|
80
|
-
assert_equal "15", parse("0b1111").inspect
|
|
81
|
-
assert_equal "10", parse("0B1010").inspect
|
|
82
|
-
|
|
83
|
-
assert_equal "+15", parse("+0b1111").inspect
|
|
84
|
-
assert_equal "+10", parse("+0B1010").inspect
|
|
85
|
-
|
|
86
|
-
assert_equal "-15", parse("-0b1111").inspect
|
|
87
|
-
assert_equal "-10", parse("-0B1010").inspect
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def test_number_base16
|
|
91
|
-
assert_equal "0", parse("0x0").inspect
|
|
92
|
-
assert_equal "255", parse("0xff").inspect
|
|
93
|
-
assert_equal "255", parse("0XFF").inspect
|
|
94
|
-
|
|
95
|
-
assert_equal "+255", parse("+0xff").inspect
|
|
96
|
-
assert_equal "+255", parse("+0XFF").inspect
|
|
97
|
-
|
|
98
|
-
assert_equal "-255", parse("-0xff").inspect
|
|
99
|
-
assert_equal "-255", parse("-0XFF").inspect
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def test_number_base10
|
|
103
|
-
assert_equal "0", parse("0").inspect
|
|
104
|
-
assert_equal "1", parse("01").inspect
|
|
105
|
-
assert_equal "10", parse("10").inspect
|
|
106
|
-
|
|
107
|
-
assert_equal "+1", parse("+1").inspect
|
|
108
|
-
assert_equal "+10", parse("+10").inspect
|
|
109
|
-
|
|
110
|
-
assert_equal "-1", parse("-1").inspect
|
|
111
|
-
assert_equal "-10", parse("-10").inspect
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
private
|
|
115
|
-
|
|
116
|
-
def parse(stmt)
|
|
117
|
-
@parser.parse(stmt)
|
|
118
|
-
end
|
|
119
|
-
end
|