octave-ruby 1.0.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.
@@ -0,0 +1,158 @@
1
+ $:.unshift File.dirname(__FILE__) + "/../../../lib"
2
+ require 'test/unit'
3
+ require 'octave'
4
+ require 'octave/driver/native/driver'
5
+ require 'rubygems'
6
+ require 'mocha'
7
+
8
+ class ConversionsTest < Test::Unit::TestCase
9
+ def setup
10
+ @driver = Octave::Driver::Native::Driver.new
11
+ @driver.feval "eval", "function r = to_octave(val); r = val; endfunction"
12
+ end
13
+
14
+ def to_octave_to_ruby(value)
15
+ @driver.feval "to_octave", value
16
+ end
17
+
18
+ def assert_octave_and_ruby_equal(value)
19
+ result = to_octave_to_ruby(value)
20
+ assert_equal value, result
21
+ assert_equal value.class, result.class
22
+ end
23
+
24
+ def test_should_convert_string
25
+ assert_octave_and_ruby_equal "foo"
26
+ end
27
+
28
+ def test_should_convert_true
29
+ assert_octave_and_ruby_equal true
30
+ end
31
+
32
+ def test_should_convert_false
33
+ assert_octave_and_ruby_equal false
34
+ end
35
+
36
+ def test_should_convert_nil
37
+ assert_octave_and_ruby_equal nil
38
+ end
39
+
40
+ def test_should_convert_float
41
+ assert_octave_and_ruby_equal 12.345
42
+ end
43
+
44
+ def test_should_convert_fixnum
45
+ # Fixnums are sent to and returned from Octave as Float
46
+ result = to_octave_to_ruby(12345)
47
+ assert_equal 12345.0, result
48
+ assert_instance_of Float, result
49
+ end
50
+
51
+ def test_should_convert_array
52
+ assert_octave_and_ruby_equal [1, nil, 3.0]
53
+ assert_octave_and_ruby_equal [1, "2", false, ["foo", "bar", "baz"]]
54
+ end
55
+
56
+ def test_should_convert_hash
57
+ assert_octave_and_ruby_equal "foo" => "bar"
58
+ assert_octave_and_ruby_equal "foo" => [1,2,3]
59
+ assert_octave_and_ruby_equal "foo" => { "bar" => [1,2,3, [4,5,6]] }
60
+ end
61
+
62
+ def test_should_convert_octave_matrix
63
+ matrix = Octave::Matrix.new(3, 3)
64
+ 3.times { |m| 3.times { |n| matrix[m, n] = rand } }
65
+ matrix[1, 1] = nil
66
+
67
+ assert_octave_and_ruby_equal matrix
68
+ end
69
+
70
+ def test_should_convert_a_1xn_octave_matrix_to_an_array
71
+ matrix = Octave::Matrix.new(1, 3)
72
+ matrix[0, 0] = 1
73
+ matrix[0, 1] = 2
74
+ matrix[0, 2] = 3
75
+
76
+ expected_array = [1,2,3]
77
+ result = to_octave_to_ruby(matrix)
78
+
79
+ assert_equal expected_array, result
80
+ assert_instance_of Array, result
81
+ end
82
+
83
+ def test_should_convert_an_nx1_octave_matrix_to_an_array
84
+ matrix = Octave::Matrix.new(3, 1)
85
+ matrix[0, 0] = 1
86
+ matrix[1, 0] = 2
87
+ matrix[2, 0] = 3
88
+
89
+ expected_array = [1,2,3]
90
+ result = to_octave_to_ruby(matrix)
91
+
92
+ assert_equal expected_array, result
93
+ assert_instance_of Array, result
94
+ end
95
+
96
+ def test_should_convert_octave_struct_matrix
97
+ cats = Octave::StructMatrix.new(17, 1, "name")
98
+ 17.times { |m| 1.times { |n| cats[m, n]["name"] = "Kitty #{m}.#{n}" } }
99
+
100
+ struct_matrix = Octave::StructMatrix.new(17, 1, "name", "age", "married", "cats", "car")
101
+ 17.times do |m|
102
+ 1.times do |n|
103
+ struct_matrix[m, n]["name"] = "Bob #{m}.#{n}"
104
+ struct_matrix[m, n]["age"] = (rand * 100).to_i
105
+ struct_matrix[m, n]["married"] = (rand > 0.5)
106
+ struct_matrix[m, n]["cats"] = cats
107
+ struct_matrix[m, n]["car"] = nil
108
+ end
109
+ end
110
+
111
+ assert_octave_and_ruby_equal struct_matrix
112
+ end
113
+
114
+ def test_should_convert_a_1x1_struct_matrix_to_a_hash
115
+ struct_matrix = Octave::StructMatrix.new(1, 1, "foo")
116
+ struct_matrix[0,0]["foo"] = { "bar" => [1,2,3] }
117
+
118
+ expected_hash = { "foo" => { "bar" => [1,2,3] } }
119
+ result = to_octave_to_ruby(struct_matrix)
120
+
121
+ assert_equal expected_hash, result
122
+ assert_instance_of Hash, result
123
+ end
124
+
125
+ def test_should_convert_octave_cell_matrix
126
+ cell_matrix = Octave::CellMatrix.new(3, 3)
127
+ cell_matrix[0, 0] = 1
128
+ cell_matrix[1, 0] = "2"
129
+ cell_matrix[2, 0] = false
130
+
131
+ assert_octave_and_ruby_equal cell_matrix
132
+ end
133
+
134
+ def test_should_convert_a_1x1_cell_matrix_to_value
135
+ cell_matrix = Octave::CellMatrix.new(1, 1)
136
+ cell_matrix[0,0] = [1, 2, 3]
137
+
138
+ assert_equal [1, 2, 3], to_octave_to_ruby(cell_matrix)
139
+ end
140
+
141
+ def test_should_convert_a_1xn_cell_matrix_to_an_array
142
+ cell_matrix = Octave::CellMatrix.new(1, 3)
143
+ cell_matrix[0,0] = "foo"
144
+ cell_matrix[0,1] = "bar"
145
+ cell_matrix[0,2] = "baz"
146
+
147
+ assert_equal %w(foo bar baz), to_octave_to_ruby(cell_matrix)
148
+ end
149
+
150
+ def test_should_convert_a_nx1_cell_matrix_to_an_array
151
+ cell_matrix = Octave::CellMatrix.new(3, 1)
152
+ cell_matrix[0,0] = "foo"
153
+ cell_matrix[1,0] = "bar"
154
+ cell_matrix[2,0] = "baz"
155
+
156
+ assert_equal %w(foo bar baz), to_octave_to_ruby(cell_matrix)
157
+ end
158
+ end
@@ -0,0 +1,32 @@
1
+ $:.unshift "../../../lib"
2
+ require 'test/unit'
3
+ require 'octave'
4
+ require 'octave/driver/native/driver'
5
+ require 'rubygems'
6
+ require 'mocha'
7
+
8
+ class DriverTest < Test::Unit::TestCase
9
+ include Octave::Driver::Native
10
+
11
+ def setup
12
+ @driver = Driver.new
13
+ end
14
+
15
+ def test_feval
16
+ API.expects(:feval).with("some_function_name", ["argument 1", "argument 2"])
17
+ @driver.feval("some_function_name", "argument 1", "argument 2")
18
+ end
19
+
20
+ def test_put_and_get_variable
21
+ assert_equal "some_value", @driver.put_variable("some_variable_name", "some_value")
22
+ assert_equal "some_value", @driver.get_variable("some_variable_name")
23
+ end
24
+
25
+ def test_putting_variable_with_same_name_multiple_times
26
+ assert_equal "foo", @driver.put_variable("some_variable_name", "foo")
27
+ assert_equal "bar", @driver.put_variable("some_variable_name", "bar")
28
+ assert_equal "baz", @driver.put_variable("some_variable_name", "baz")
29
+
30
+ assert_equal "baz", @driver.get_variable("some_variable_name")
31
+ end
32
+ end
@@ -0,0 +1,50 @@
1
+ require 'test/unit'
2
+ require 'octave'
3
+ require 'octave/engine'
4
+ require 'rubygems'
5
+ require 'mocha'
6
+
7
+ class Driver
8
+ end
9
+
10
+ class EngineTest_Init < Test::Unit::TestCase
11
+ def test_new
12
+ driver = mock()
13
+ Driver.expects(:new).returns(driver)
14
+
15
+ engine = Octave::Engine.new(:driver => Driver)
16
+ end
17
+
18
+ def test_new_with_invalid_driver
19
+ exception = assert_raise(LoadError) do
20
+ engine = Octave::Engine.new(:driver => "foo")
21
+ end
22
+ assert_equal "no such file to load -- octave/driver/foo/driver", exception.message
23
+
24
+ exception = assert_raise(LoadError) do
25
+ engine = Octave::Engine.new(:driver => :bar)
26
+ end
27
+ assert_equal "no such file to load -- octave/driver/bar/driver", exception.message
28
+ end
29
+
30
+ def test_new_with_native_driver
31
+ assert_nothing_raised do
32
+ engine = Octave::Engine.new
33
+ end
34
+ end
35
+ end
36
+
37
+ class EngineTest < Test::Unit::TestCase
38
+ def setup
39
+ @driver = mock()
40
+ @handle = mock()
41
+ Driver.expects(:new).returns(@driver)
42
+
43
+ @engine = Octave::Engine.new(:driver => Driver)
44
+ end
45
+
46
+ def test_method_missing
47
+ @driver.expects(:feval).with("some_method_name", "argument 1", "argument 2")
48
+ @engine.some_method_name("argument 1", "argument 2")
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: octave-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jonathan Younger
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-01-07 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.4.0
23
+ version:
24
+ description: "== USAGE: require 'octave' engine = Octave::Engine.new engine.eval \"123.456 * 789.101112\" engine.rand(10) matrix = Octave::Matrix.new(20, 400) 20.times { |m| 400.times { |n| matrix[m, n] = rand } } engine.put_variable(\"m\", matrix) engine.save \"/tmp/20_x_400_matrix\" == REQUIREMENTS: * Octave * GCC or some other compiler to build the included extension * Mocha (For testing only)"
25
+ email:
26
+ - jonathan.younger@lipomics.com
27
+ executables: []
28
+
29
+ extensions:
30
+ - ext/octave_api/extconf.rb
31
+ extra_rdoc_files:
32
+ - History.txt
33
+ - LICENSE.txt
34
+ - Manifest.txt
35
+ - README.txt
36
+ files:
37
+ - History.txt
38
+ - LICENSE.txt
39
+ - Manifest.txt
40
+ - README.txt
41
+ - Rakefile
42
+ - ext/octave_api/MANIFEST
43
+ - ext/octave_api/Makefile
44
+ - ext/octave_api/extconf.rb
45
+ - ext/octave_api/octave-includes.h
46
+ - ext/octave_api/octave-ruby.cpp
47
+ - ext/octave_api/octave-ruby.h
48
+ - ext/octave_api/octave_api.c
49
+ - ext/octave_api/octave_api.h
50
+ - ext/octave_api/or-array.cpp
51
+ - ext/octave_api/or-array.h
52
+ - ext/octave_api/or-cell_matrix.cpp
53
+ - ext/octave_api/or-cell_matrix.h
54
+ - ext/octave_api/or-hash.cpp
55
+ - ext/octave_api/or-hash.h
56
+ - ext/octave_api/or-matrix.cpp
57
+ - ext/octave_api/or-matrix.h
58
+ - ext/octave_api/or-string.cpp
59
+ - ext/octave_api/or-string.h
60
+ - ext/octave_api/or-struct_matrix.cpp
61
+ - ext/octave_api/or-struct_matrix.h
62
+ - ext/octave_api/or-variable.cpp
63
+ - ext/octave_api/or-variable.h
64
+ - lib/octave.rb
65
+ - lib/octave/driver/native/driver.rb
66
+ - lib/octave/engine.rb
67
+ - lib/octave/matrix.rb
68
+ - lib/octave/version.rb
69
+ - setup.rb
70
+ - test/driver/native/test_conversions.rb
71
+ - test/driver/native/test_driver.rb
72
+ - test/test_engine.rb
73
+ has_rdoc: true
74
+ homepage: http://octave-ruby.rubyforge.org/
75
+ post_install_message:
76
+ rdoc_options:
77
+ - --main
78
+ - README.txt
79
+ require_paths:
80
+ - lib
81
+ - ext
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: "0"
87
+ version:
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: "0"
93
+ version:
94
+ requirements: []
95
+
96
+ rubyforge_project: octave-ruby
97
+ rubygems_version: 1.0.1
98
+ signing_key:
99
+ specification_version: 2
100
+ summary: A Ruby interface to the Octave interpreted language.
101
+ test_files:
102
+ - test/driver/native/test_conversions.rb
103
+ - test/driver/native/test_driver.rb
104
+ - test/test_engine.rb