optimus-ep 0.6.91 → 0.8.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/CHANGELOG +13 -0
- data/{License.txt → LICENSE} +1 -1
- data/{Manifest.txt → Manifest} +23 -11
- data/{README.txt → README} +1 -1
- data/Rakefile +9 -10
- data/autotest/discover.rb +1 -0
- data/bin/eprime2tabfile +10 -10
- data/bin/extract_timings +4 -4
- data/lib/eprimetab_parser.rb +3 -3
- data/lib/excel_parser.rb +2 -2
- data/lib/expression_parser/evaluators.rb +188 -0
- data/lib/expression_parser/expressions.rb +173 -0
- data/lib/log_file_parser.rb +9 -9
- data/lib/optimus.rb +30 -0
- data/lib/{eprime_data.rb → optimus_data.rb} +12 -29
- data/lib/{eprime_reader.rb → optimus_reader.rb} +27 -13
- data/lib/parsed_calculator.rb +92 -0
- data/lib/raw_tab_parser.rb +3 -3
- data/lib/runners/generic_runner.rb +7 -7
- data/lib/runners/yaml_template/option_parser.rb +33 -0
- data/lib/runners/yaml_template/runner.rb +19 -0
- data/lib/tabfile_parser.rb +6 -6
- data/lib/tabfile_writer.rb +7 -7
- data/lib/transformers/basic_transformer.rb +35 -24
- data/lib/transformers/column_calculator.rb +131 -326
- data/lib/transformers/multipasser.rb +10 -6
- data/lib/transformers/row_filter.rb +7 -12
- data/lib/transformers/timing_extractor.rb +3 -3
- data/lib/version.rb +3 -3
- data/lib/writers/stimtimes_writer.rb +6 -6
- data/optimus-ep.gemspec +37 -0
- data/spec/eprimetab_parser_spec.rb +7 -7
- data/spec/excel_parser_spec.rb +6 -6
- data/spec/expression_parser/evaluators_spec.rb +241 -0
- data/spec/expression_parser/expressions_spec.rb +119 -0
- data/spec/log_file_parser_spec.rb +30 -30
- data/spec/{eprime_data_spec.rb → optimus_data_spec.rb} +20 -20
- data/spec/{eprime_reader_spec.rb → optimus_reader_spec.rb} +36 -24
- data/spec/parsed_calculator_spec.rb +112 -0
- data/spec/raw_tab_parser_spec.rb +26 -0
- data/spec/runners/generic_runner_spec.rb +5 -12
- data/spec/runners/yaml_template/option_parser_spec.rb +25 -0
- data/spec/runners/yaml_template/runner_spec.rb +20 -0
- data/spec/samples/optimus_log.txt +103 -103
- data/spec/samples/optimus_log_utf16le.txt +0 -0
- data/spec/samples/raw_tsv.txt +4 -0
- data/spec/spec_helper.rb +75 -12
- data/spec/tabfile_parser_spec.rb +18 -18
- data/spec/tabfile_writer_spec.rb +12 -12
- data/spec/transformers/basic_transformer_spec.rb +18 -8
- data/spec/transformers/column_calculator_spec.rb +109 -364
- data/spec/transformers/multipasser_spec.rb +14 -7
- data/spec/transformers/row_filter_spec.rb +11 -6
- data/spec/transformers/timing_extractor_spec.rb +8 -8
- data/spec/writers/stimtimes_writer_spec.rb +3 -3
- metadata +103 -50
- data/History.txt +0 -45
- data/lib/calculator.rb +0 -51
- data/lib/eprime.rb +0 -24
- data/spec/calculator_spec.rb +0 -70
@@ -1,17 +1,17 @@
|
|
1
1
|
# Part of the Optimus package for managing E-Prime data
|
2
2
|
#
|
3
|
-
# Copyright (C) 2008 Board of Regents of the University of Wisconsin System
|
3
|
+
# Copyright (C) 2008-09 Board of Regents of the University of Wisconsin System
|
4
4
|
#
|
5
5
|
# Written by Nathan Vack <njvack@wisc.edu>, at the Waisman Laborotory for Brain
|
6
6
|
# Imaging and Behavior, University of Wisconsin - Madison
|
7
7
|
|
8
8
|
require File.join(File.dirname(__FILE__),'../spec_helper')
|
9
|
-
require File.join(File.dirname(__FILE__), '../../lib/
|
9
|
+
require File.join(File.dirname(__FILE__), '../../lib/optimus')
|
10
10
|
require 'transformers/timing_extractor'
|
11
|
-
include
|
12
|
-
include
|
11
|
+
include OptimusTestHelper
|
12
|
+
include Optimus::Transformers
|
13
13
|
|
14
|
-
describe
|
14
|
+
describe Optimus::Transformers::TimingExtractor do
|
15
15
|
before :each do
|
16
16
|
@data = mock_edata
|
17
17
|
@tx = TimingExtractor.new(@data)
|
@@ -42,7 +42,7 @@ describe Eprime::Transformers::TimingExtractor do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should extract from computed columns" do
|
45
|
-
@tx.computed_column 'foo', 'a'
|
45
|
+
@tx.computed_column 'foo', "'a'"
|
46
46
|
@tx.columns.should include('foo')
|
47
47
|
@tx.extract_stimulus('foo', 'foo', 'foo')
|
48
48
|
@tx.extracted_data.size.should == @data.size
|
@@ -63,8 +63,8 @@ describe Eprime::Transformers::TimingExtractor do
|
|
63
63
|
before :each do
|
64
64
|
@data = mock_edata
|
65
65
|
@tx = TimingExtractor.new(@data)
|
66
|
-
@tx.computed_column('stim_name','stim')
|
67
|
-
@tx.computed_column('fix_name', 'fixation')
|
66
|
+
@tx.computed_column('stim_name',"'stim'")
|
67
|
+
@tx.computed_column('fix_name', "'fixation'")
|
68
68
|
@tx.computed_column('stim_offset', '{stim_time} + 500 - {run_start}')
|
69
69
|
@tx.computed_column('fix_offset', '{fix_time}+130-{run_start}')
|
70
70
|
@tx.extract_stimulus('stim_name', 'stim_time', 'stim_time')
|
@@ -1,16 +1,16 @@
|
|
1
1
|
# Part of the Optimus package for managing E-Prime data
|
2
2
|
#
|
3
|
-
# Copyright (C) 2008 Board of Regents of the University of Wisconsin System
|
3
|
+
# Copyright (C) 2008-09 Board of Regents of the University of Wisconsin System
|
4
4
|
#
|
5
5
|
# Written by Nathan Vack <njvack@wisc.edu>, at the Waisman Laborotory for Brain
|
6
6
|
# Imaging and Behavior, University of Wisconsin - Madison
|
7
7
|
|
8
8
|
|
9
9
|
require File.join(File.dirname(__FILE__),'../spec_helper')
|
10
|
-
require File.join(File.dirname(__FILE__), '../../lib/
|
10
|
+
require File.join(File.dirname(__FILE__), '../../lib/optimus')
|
11
11
|
require File.join(File.dirname(__FILE__), '../../lib/writers/stimtimes_writer')
|
12
12
|
|
13
|
-
describe
|
13
|
+
describe Optimus::StimtimesWriter do
|
14
14
|
# I don't actually know how to spec this out. I'm a bit worried.
|
15
15
|
|
16
16
|
end
|
metadata
CHANGED
@@ -1,78 +1,110 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: optimus-ep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 63
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 8
|
9
|
+
- 0
|
10
|
+
version: 0.8.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
|
-
-
|
13
|
+
- Nate Vack
|
8
14
|
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2010-11-01 00:00:00 -05:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: rparsec
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 15
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 0
|
23
33
|
version: "1.0"
|
24
|
-
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
|
28
|
-
|
29
|
-
|
37
|
+
name: rspec
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
30
41
|
requirements:
|
31
42
|
- - ">="
|
32
43
|
- !ruby/object:Gem::Version
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
version: "0"
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id002
|
50
|
+
description: Utilities to process behavioral data generated by E-Prime
|
51
|
+
email: njvack@wisc.edu
|
38
52
|
executables:
|
39
53
|
- eprime2tabfile
|
40
54
|
- extract_timings
|
41
55
|
extensions: []
|
42
56
|
|
43
57
|
extra_rdoc_files:
|
44
|
-
-
|
45
|
-
-
|
46
|
-
-
|
47
|
-
-
|
48
|
-
-
|
49
|
-
-
|
50
|
-
-
|
51
|
-
-
|
52
|
-
-
|
53
|
-
-
|
54
|
-
-
|
55
|
-
-
|
56
|
-
-
|
57
|
-
-
|
58
|
+
- CHANGELOG
|
59
|
+
- LICENSE
|
60
|
+
- README
|
61
|
+
- bin/eprime2tabfile
|
62
|
+
- bin/extract_timings
|
63
|
+
- lib/eprimetab_parser.rb
|
64
|
+
- lib/excel_parser.rb
|
65
|
+
- lib/expression_parser/evaluators.rb
|
66
|
+
- lib/expression_parser/expressions.rb
|
67
|
+
- lib/log_file_parser.rb
|
68
|
+
- lib/optimus.rb
|
69
|
+
- lib/optimus_data.rb
|
70
|
+
- lib/optimus_reader.rb
|
71
|
+
- lib/parsed_calculator.rb
|
72
|
+
- lib/raw_tab_parser.rb
|
73
|
+
- lib/runners/generic_runner.rb
|
74
|
+
- lib/runners/yaml_template/option_parser.rb
|
75
|
+
- lib/runners/yaml_template/runner.rb
|
76
|
+
- lib/tabfile_parser.rb
|
77
|
+
- lib/tabfile_writer.rb
|
78
|
+
- lib/transformers/basic_transformer.rb
|
79
|
+
- lib/transformers/column_calculator.rb
|
80
|
+
- lib/transformers/multipasser.rb
|
81
|
+
- lib/transformers/row_filter.rb
|
82
|
+
- lib/transformers/timing_extractor.rb
|
83
|
+
- lib/version.rb
|
84
|
+
- lib/writers/stimtimes_writer.rb
|
58
85
|
files:
|
86
|
+
- CHANGELOG
|
59
87
|
- GPL.txt
|
60
|
-
-
|
61
|
-
-
|
62
|
-
-
|
63
|
-
- README.txt
|
88
|
+
- LICENSE
|
89
|
+
- Manifest
|
90
|
+
- README
|
64
91
|
- Rakefile
|
92
|
+
- autotest/discover.rb
|
65
93
|
- bin/eprime2tabfile
|
66
94
|
- bin/extract_timings
|
67
|
-
- lib/calculator.rb
|
68
|
-
- lib/eprime.rb
|
69
|
-
- lib/eprime_data.rb
|
70
|
-
- lib/eprime_reader.rb
|
71
95
|
- lib/eprimetab_parser.rb
|
72
96
|
- lib/excel_parser.rb
|
97
|
+
- lib/expression_parser/evaluators.rb
|
98
|
+
- lib/expression_parser/expressions.rb
|
73
99
|
- lib/log_file_parser.rb
|
100
|
+
- lib/optimus.rb
|
101
|
+
- lib/optimus_data.rb
|
102
|
+
- lib/optimus_reader.rb
|
103
|
+
- lib/parsed_calculator.rb
|
74
104
|
- lib/raw_tab_parser.rb
|
75
105
|
- lib/runners/generic_runner.rb
|
106
|
+
- lib/runners/yaml_template/option_parser.rb
|
107
|
+
- lib/runners/yaml_template/runner.rb
|
76
108
|
- lib/tabfile_parser.rb
|
77
109
|
- lib/tabfile_writer.rb
|
78
110
|
- lib/transformers/basic_transformer.rb
|
@@ -82,18 +114,25 @@ files:
|
|
82
114
|
- lib/transformers/timing_extractor.rb
|
83
115
|
- lib/version.rb
|
84
116
|
- lib/writers/stimtimes_writer.rb
|
85
|
-
- spec/calculator_spec.rb
|
86
|
-
- spec/eprime_data_spec.rb
|
87
|
-
- spec/eprime_reader_spec.rb
|
88
117
|
- spec/eprimetab_parser_spec.rb
|
89
118
|
- spec/excel_parser_spec.rb
|
119
|
+
- spec/expression_parser/evaluators_spec.rb
|
120
|
+
- spec/expression_parser/expressions_spec.rb
|
90
121
|
- spec/log_file_parser_spec.rb
|
122
|
+
- spec/optimus_data_spec.rb
|
123
|
+
- spec/optimus_reader_spec.rb
|
124
|
+
- spec/parsed_calculator_spec.rb
|
125
|
+
- spec/raw_tab_parser_spec.rb
|
91
126
|
- spec/runners/generic_runner_spec.rb
|
127
|
+
- spec/runners/yaml_template/option_parser_spec.rb
|
128
|
+
- spec/runners/yaml_template/runner_spec.rb
|
92
129
|
- spec/samples/bad_excel_tsv.txt
|
93
130
|
- spec/samples/corrupt_log_file.txt
|
94
131
|
- spec/samples/eprime_tsv.txt
|
95
132
|
- spec/samples/excel_tsv.txt
|
96
133
|
- spec/samples/optimus_log.txt
|
134
|
+
- spec/samples/optimus_log_utf16le.txt
|
135
|
+
- spec/samples/raw_tsv.txt
|
97
136
|
- spec/samples/short_columns.txt
|
98
137
|
- spec/samples/sorted_columns.txt
|
99
138
|
- spec/samples/std_columns.txt
|
@@ -108,32 +147,46 @@ files:
|
|
108
147
|
- spec/transformers/row_filter_spec.rb
|
109
148
|
- spec/transformers/timing_extractor_spec.rb
|
110
149
|
- spec/writers/stimtimes_writer_spec.rb
|
150
|
+
- optimus-ep.gemspec
|
111
151
|
has_rdoc: true
|
112
|
-
homepage: http://
|
113
|
-
|
152
|
+
homepage: http://github.com/njvack/optimus-ep
|
153
|
+
licenses: []
|
154
|
+
|
155
|
+
post_install_message:
|
114
156
|
rdoc_options:
|
157
|
+
- --line-numbers
|
158
|
+
- --inline-source
|
159
|
+
- --title
|
160
|
+
- Optimus-ep
|
115
161
|
- --main
|
116
|
-
- README
|
162
|
+
- README
|
117
163
|
require_paths:
|
118
164
|
- lib
|
119
165
|
required_ruby_version: !ruby/object:Gem::Requirement
|
166
|
+
none: false
|
120
167
|
requirements:
|
121
168
|
- - ">="
|
122
169
|
- !ruby/object:Gem::Version
|
170
|
+
hash: 3
|
171
|
+
segments:
|
172
|
+
- 0
|
123
173
|
version: "0"
|
124
|
-
version:
|
125
174
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
|
+
none: false
|
126
176
|
requirements:
|
127
177
|
- - ">="
|
128
178
|
- !ruby/object:Gem::Version
|
129
|
-
|
130
|
-
|
179
|
+
hash: 11
|
180
|
+
segments:
|
181
|
+
- 1
|
182
|
+
- 2
|
183
|
+
version: "1.2"
|
131
184
|
requirements: []
|
132
185
|
|
133
186
|
rubyforge_project: optimus-ep
|
134
|
-
rubygems_version: 1.3.
|
187
|
+
rubygems_version: 1.3.7
|
135
188
|
signing_key:
|
136
|
-
specification_version:
|
137
|
-
summary:
|
189
|
+
specification_version: 3
|
190
|
+
summary: Utilities to process behavioral data generated by E-Prime
|
138
191
|
test_files: []
|
139
192
|
|
data/History.txt
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
== 0.6.9.1 3/10/2008
|
2
|
-
* Bug fix:
|
3
|
-
* Fix for parsing eprime log files in which leaf frames don't occur at the
|
4
|
-
highest log level
|
5
|
-
|
6
|
-
== 0.6.9 2/25/2008
|
7
|
-
* New features:
|
8
|
-
* Supports parsing raw tab-delmimted files
|
9
|
-
* Allows Procs as starting values for ComputedColumns
|
10
|
-
* Bug fixes:
|
11
|
-
* No longer jumbles the order of Eprime log files
|
12
|
-
|
13
|
-
== 0.6.5 9/2/2008
|
14
|
-
* New features:
|
15
|
-
* Speed! Speed! Speed! Should be something like 10x faster.
|
16
|
-
* Procs are now allowed in ComputedColumns -- so if you want to do really
|
17
|
-
arbitrary things in your column computation, have at it.
|
18
|
-
|
19
|
-
== 0.6.0 7/14/2008
|
20
|
-
* New features:
|
21
|
-
* Added extract_timings, a script to pull stimulus timing data from eprime
|
22
|
-
files.
|
23
|
-
* Added a GenericRunner -- a class that greatly eases end-to-end
|
24
|
-
transformation of eprime data. See extract_timings for an example of
|
25
|
-
its use.
|
26
|
-
|
27
|
-
== 0.5.5 7/09/2008
|
28
|
-
* New features:
|
29
|
-
* Supports making multiple passes through data, to allow extracting multiple
|
30
|
-
stimuli that occur on the same row
|
31
|
-
* Created a general-purpose stimulus extractor to pull data out in the
|
32
|
-
format:
|
33
|
-
stimulus \t onset__time \t offset__time
|
34
|
-
* Architectural changes:
|
35
|
-
* Created a BasicTransformer that performs all of the basic operations to
|
36
|
-
datasets: column calculation, row filtering, and multipass
|
37
|
-
* Moved ColumnCalculator, RowFilter, and Multipasser into a Transformers
|
38
|
-
module
|
39
|
-
* Support release via hoe / rubygems
|
40
|
-
|
41
|
-
== 0.5.0 6/26/2008
|
42
|
-
|
43
|
-
* First public gem release
|
44
|
-
* Supports converting general Eprime files into tab-delimited files
|
45
|
-
* Supports converting Eprime files into AFNI stim_times files
|
data/lib/calculator.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
# Part of the Optimus package for managing E-Prime data
|
2
|
-
#
|
3
|
-
# Copyright (C) 2008 Board of Regents of the University of Wisconsin System
|
4
|
-
#
|
5
|
-
# Written by Nathan Vack <njvack@wisc.edu>, at the Waisman Laborotory for Brain
|
6
|
-
# Imaging and Behavior, University of Wisconsin - Madison
|
7
|
-
#
|
8
|
-
# Calculator code adapted from rparsec infix calculator demo
|
9
|
-
# at http://docs.codehaus.org/display/JPARSEC/Ruby+Parsec
|
10
|
-
# rparsec (C) Ben Yu
|
11
|
-
|
12
|
-
require 'rubygems'
|
13
|
-
require 'rparsec'
|
14
|
-
include RParsec
|
15
|
-
|
16
|
-
module Eprime
|
17
|
-
class Calculator
|
18
|
-
include Parsers
|
19
|
-
include Functors
|
20
|
-
|
21
|
-
Mod = lambda { |x, y| x.to_i % y.to_i }
|
22
|
-
Eql = lambda { |x, y| x.to_s == y.to_s }
|
23
|
-
|
24
|
-
def initialize
|
25
|
-
ops = OperatorTable.new.
|
26
|
-
infixl(char('+') >> Plus, 20).
|
27
|
-
infixl(char('-') >> Minus, 20).
|
28
|
-
infixl(char('*') >> Mul, 40).
|
29
|
-
infixl(char('/') >> Div, 40).
|
30
|
-
infixl(char('%') >> Mod, 40).
|
31
|
-
prefix(char('-') >> Neg, 60)
|
32
|
-
expr = nil
|
33
|
-
float_parser = number.map(&To_f)
|
34
|
-
string_parser = regexp(/[_a-z]\S*/i)
|
35
|
-
grouping_parser = char('(') >>(lazy{expr})<< char(')')
|
36
|
-
term = alt(float_parser, grouping_parser, string_parser)
|
37
|
-
delim = whitespace.many_
|
38
|
-
expr = delim >> Expressions.build(term, ops, delim)
|
39
|
-
@parser = expr << eof
|
40
|
-
end
|
41
|
-
|
42
|
-
def compute(expression)
|
43
|
-
ans = @parser.parse(expression)
|
44
|
-
return ans if ans.is_a?(String)
|
45
|
-
if (ans - ans.to_i) == 0
|
46
|
-
ans = ans.to_i
|
47
|
-
end
|
48
|
-
return ans.to_s
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/lib/eprime.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# Part of the Optimus package for managing E-Prime data
|
2
|
-
#
|
3
|
-
# Copyright (C) 2008 Board of Regents of the University of Wisconsin System
|
4
|
-
#
|
5
|
-
# Written by Nathan Vack <njvack@wisc.edu>, at the Waisman Laborotory for Brain
|
6
|
-
# Imaging and Behavior, University of Wisconsin - Madison
|
7
|
-
|
8
|
-
# Add our lib to the search path
|
9
|
-
$: << File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
|
10
|
-
|
11
|
-
require 'eprime_data'
|
12
|
-
require 'version'
|
13
|
-
require 'tabfile_writer'
|
14
|
-
require 'eprime_reader'
|
15
|
-
|
16
|
-
module Eprime
|
17
|
-
|
18
|
-
# Raised whenever an input file's type can't be detemined by Eprime::Reader
|
19
|
-
class UnknownTypeError < Exception; end
|
20
|
-
|
21
|
-
# Raised whenever an input file seems to be damaged
|
22
|
-
class DamagedFileError < Exception; end
|
23
|
-
|
24
|
-
end
|
data/spec/calculator_spec.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
# Part of the Optimus package for managing E-Prime data
|
2
|
-
#
|
3
|
-
# Copyright (C) 2008 Board of Regents of the University of Wisconsin System
|
4
|
-
#
|
5
|
-
# Written by Nathan Vack <njvack@wisc.edu>, at the Waisman Laborotory for Brain
|
6
|
-
# Imaging and Behavior, University of Wisconsin - Madison
|
7
|
-
|
8
|
-
require File.join(File.dirname(__FILE__),'spec_helper')
|
9
|
-
require File.join(File.dirname(__FILE__), '../lib/eprime')
|
10
|
-
require 'calculator'
|
11
|
-
|
12
|
-
include EprimeTestHelper
|
13
|
-
|
14
|
-
describe Eprime::Calculator do
|
15
|
-
before :all do
|
16
|
-
@calc = Eprime::Calculator.new
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should compute constants" do
|
20
|
-
@calc.compute(es(:const)).should == ev(:const)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should allow strings" do
|
24
|
-
@calc.compute(es(:str_const)).should == ev(:str_const)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should allow string concatentation" do
|
28
|
-
@calc.compute(es(:str_cat)).should == ev(:str_cat)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should not allow concatenating numbers with strings" do
|
32
|
-
lambda {
|
33
|
-
@calc.compute("1 + a")
|
34
|
-
}.should raise_error
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should add" do
|
38
|
-
@calc.compute(es(:add)).should == ev(:add)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should multiply" do
|
42
|
-
@calc.compute(es(:mul)).should == ev(:mul)
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should handle negation" do
|
46
|
-
@calc.compute(es(:add_neg)).should == ev(:add_neg)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should handle grouping" do
|
50
|
-
@calc.compute(es(:add_mul_group)).should == ev(:add_mul_group)
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should handle fdiv" do
|
54
|
-
@calc.compute(es(:fdiv)).should == ev(:fdiv)
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should handle fmul" do
|
58
|
-
@calc.compute(es(:fmul)).should == ev(:fmul)
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should handle mod" do
|
62
|
-
@calc.compute(es(:mod)).should == ev(:mod)
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should fail with infix garbage" do
|
66
|
-
lambda {
|
67
|
-
@calc.compute("1 broken 2")
|
68
|
-
}.should raise_error(RParsec::ParserException)
|
69
|
-
end
|
70
|
-
end
|