ruby-gsl-ng 0.2.0 → 0.2.2

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.
@@ -1,3 +1,6 @@
1
+ === 0.2.1
2
+ * Fixed for FFI 0.6.0
3
+
1
4
  === 0.2.0
2
5
  * Completed Vector
3
6
  * Added Matrix (mostly complete)
@@ -1,8 +1,7 @@
1
- .autotest
2
1
  History.txt
3
- Manifest.txt
4
- README.txt
2
+ README.rdoc
5
3
  Rakefile
4
+ TODO
6
5
  ext/extconf.rb
7
6
  ext/gslng_extensions.cpp
8
7
  lib/gslng.rb
@@ -15,8 +14,9 @@ lib/gslng/matrix.rb
15
14
  lib/gslng/matrix_view.rb
16
15
  lib/gslng/vector.rb
17
16
  lib/gslng/vector_view.rb
17
+ ruby-gsl-ng.gemspec
18
18
  test/benchmark.rb
19
19
  test/matrix_test.rb
20
20
  test/test_gsl.rb
21
21
  test/vector_test.rb
22
-
22
+ Manifest
@@ -1,6 +1,6 @@
1
1
  = Ruby/GSL-ng
2
2
 
3
- * http://ruby-gsl-ng.googlecode.com
3
+ * http://wiki.github.com/v01d/ruby-gsl-ng/
4
4
 
5
5
  == DESCRIPTION:
6
6
 
data/Rakefile CHANGED
@@ -1,13 +1,20 @@
1
1
  # -*- ruby -*-
2
-
3
2
  require 'rubygems'
4
- require 'hoe'
3
+ require 'rake'
4
+ require 'echoe'
5
+ require 'yard'
6
+
7
+ Echoe.new('ruby-gsl-ng') do |p|
8
+ p.author = 'v01d'
9
+ p.summary = "Ruby Object Oriented Graph LIbrary"
10
+ p.url = "http://github.com/v01d/roogli"
11
+ p.version = "0.2.2"
12
+ p.dependencies = ['yard', 'ffi']
13
+ # p.eval = proc { s.has_rdoc = 'yard' }
14
+ end
5
15
 
6
- Hoe.spec('ruby-gsl-ng') do
7
- developer('v01d', 'phreakuencies@gmail.com')
8
- spec_extras[:extensions] = ["ext/extconf.rb"]
9
- extra_deps << [ 'ffi', '>=0' ]
10
- ENV['NODOT'] = '1'
16
+ YARD::Rake::YardocTask.new do |t|
17
+ t.files = ['lib/**/*.rb'] # optional
18
+ t.options = ['--verbose','--no-private'] # optional
11
19
  end
12
20
 
13
- # vim: syntax=ruby
data/TODO ADDED
@@ -0,0 +1,2 @@
1
+ Documentation:
2
+ - usar cosas de Yard, tipo returns y eso?
@@ -102,4 +102,18 @@ extern "C" gsl_matrix* gsl_matrix_submatrix2(gsl_matrix* m_ptr, size_t x, size_t
102
102
  gsl_matrix* matrix_view = gsl_matrix_alloc(view.matrix.size1, view.matrix.size2);
103
103
  *matrix_view = view.matrix;
104
104
  return matrix_view;
105
+ }
106
+
107
+ extern "C" gsl_vector* gsl_matrix_row_view(gsl_matrix* m_ptr, size_t row, size_t offset, size_t size) {
108
+ gsl_vector_view view = gsl_matrix_subrow(m_ptr, row, offset, size);
109
+ gsl_vector* vector_view = gsl_vector_alloc(view.vector.size);
110
+ *vector_view = view.vector;
111
+ return vector_view;
112
+ }
113
+
114
+ extern "C" gsl_vector* gsl_matrix_column_view(gsl_matrix* m_ptr, size_t column, size_t offset, size_t size) {
115
+ gsl_vector_view view = gsl_matrix_subcolumn(m_ptr, column, offset, size);
116
+ gsl_vector* vector_view = gsl_vector_alloc(view.vector.size);
117
+ *vector_view = view.vector;
118
+ return vector_view;
105
119
  }
@@ -6,6 +6,3 @@ require 'gslng/vector_view'
6
6
  require 'gslng/matrix'
7
7
  require 'gslng/matrix_view'
8
8
 
9
- module GSLng
10
- VERSION = "0.2.0"
11
- end
@@ -5,10 +5,11 @@ module GSLng
5
5
  # If ruby had "private" modules I wouldn't have to do this.
6
6
  @backend = Module.new do
7
7
  extend FFI::Library
8
+ ffi_lib(FFI::CURRENT_PROCESS)
8
9
  end
9
10
 
10
11
  # Returns the internal backend module
11
- def GSLng.backend
12
+ def GSLng.backend # @private
12
13
  @backend
13
14
  end
14
15
  end
@@ -1,4 +1,4 @@
1
- module GSLng #:nodoc:
1
+ module GSLng
2
2
  backend.instance_eval do
3
3
  # All of this raises an exception when GSL registers an error
4
4
  callback :error_handler_callback, [ :string, :string, :int, :int ], :void
@@ -64,6 +64,8 @@ module GSLng
64
64
 
65
65
  # views
66
66
  attach_function :gsl_matrix_submatrix2, [ :pointer, :size_t, :size_t, :size_t, :size_t ], :pointer
67
+ attach_function :gsl_matrix_row_view, [ :pointer, :size_t, :size_t, :size_t ], :pointer
68
+ attach_function :gsl_matrix_column_view, [ :pointer, :size_t, :size_t, :size_t ], :pointer
67
69
 
68
70
  # BLAS interface
69
71
  enum :cblas_transpose_t, [ :no_transpose, 111, :transpose, :conjugate_transpose ]
@@ -1,5 +1,5 @@
1
1
  module GSLng
2
- def GSLng.set_finalizer(obj, func, ptr) #:nodoc:
2
+ def GSLng.set_finalizer(obj, func, ptr) # @private
3
3
  ObjectSpace.define_finalizer(obj, lambda {|id| GSLng.backend.send(func, ptr)})
4
4
  end
5
5
  end
@@ -28,10 +28,10 @@ module GSLng
28
28
  GSLng.set_finalizer(self, :gsl_matrix_free, @ptr)
29
29
 
30
30
  @m,@n = m,n
31
- if (block_given?) then self.map_index!(&Proc.new) end
31
+ if (block_given?) then self.map_index!(Proc.new) end
32
32
  end
33
33
 
34
- def initialize_copy(other) #:nodoc:
34
+ def initialize_copy(other) # @private
35
35
  ObjectSpace.undefine_finalizer(self) # TODO: ruby bug?
36
36
  @ptr = GSLng.backend::gsl_matrix_alloc(other.m, other.n)
37
37
  GSLng.set_finalizer(self, :gsl_matrix_free, @ptr)
@@ -145,13 +145,27 @@ module GSLng
145
145
  def submatrix(*args); self.submatrix_view(*args).to_matrix end
146
146
 
147
147
  # Creates a Matrix::View for the i-th column
148
- def column_view(i, offset = 0, size = nil); self.view(offset, i, (size or (self.m - offset)), 1) end
148
+ def column_view(i, offset = 0, size = nil); self.view(offset, i, (size or (@m - offset)), 1) end
149
149
 
150
150
  # Analogous to #submatrix
151
151
  def column(*args); self.column_view(*args).to_matrix end
152
152
 
153
153
  # Creates a Matrix::View for the i-th row
154
- def row_view(i, offset = 0, size = nil); self.view(i, offset, 1, (size or (self.n - offset))) end
154
+ def row_view(i, offset = 0, size = nil); self.view(i, offset, 1, (size or (@n - offset))) end
155
+
156
+ # Same as #row_view, but returns a Vector::View
157
+ def row_vecview(i, offset = 0, size = nil)
158
+ size = (@n - offset) if size.nil?
159
+ ptr = GSLng.backend.gsl_matrix_row_view(self.ptr, i, offset, size)
160
+ Vector::View.new(ptr, self, offset, size)
161
+ end
162
+
163
+ # Same as #column_view, but returns a Vector::View
164
+ def column_vecview(i, offset = 0, size = nil)
165
+ size = (@m - offset) if size.nil?
166
+ ptr = GSLng.backend.gsl_matrix_column_view(self.ptr, i, offset, size)
167
+ Vector::View.new(ptr, self, offset, size)
168
+ end
155
169
 
156
170
  # Analogous to #submatrix
157
171
  def row(*args); self.row_view(*args).to_matrix end
@@ -330,18 +344,30 @@ module GSLng
330
344
  end
331
345
 
332
346
  # Same as #each, but faster. The catch is that this method returns nothing.
333
- def fast_each(&block) #:yield: elem
347
+ def fast_each(block = Proc.new) #:yield: elem
334
348
  GSLng.backend::gsl_matrix_each(self.ptr, block)
335
349
  end
336
350
 
351
+ # Yields the block for each row *view* (Matrix::View).
352
+ def each_row; self.rows.times {|i| yield(row_view(i))} end
353
+
354
+ # Same as #each_row, but yields Vector::View's
355
+ def each_vec_row; self.rows.times {|i| yield(row_vecview(i))} end
356
+
357
+ # Same as #each_column, but yields Vector::View's
358
+ def each_vec_column; self.columns.times {|i| yield(column_vecview(i))} end
359
+
360
+ # Yields the block for each column *view* (Matrix::View).
361
+ def each_column; self.columns.times {|i| yield(column_view(i))} end
362
+
337
363
  # Efficient map! implementation
338
- def map!(&block); GSLng.backend::gsl_matrix_map(@ptr, block); return self end
364
+ def map!(block = Proc.new); GSLng.backend::gsl_matrix_map(@ptr, block); return self end
339
365
 
340
366
  # Alternate version of #map!, in this case the block receives the index as a parameter.
341
- def map_index!(&block); GSLng.backend::gsl_matrix_map_index(@ptr, block); return self end
367
+ def map_index!(block = Proc.new); GSLng.backend::gsl_matrix_map_index(@ptr, block); return self end
342
368
 
343
369
  # See #map!. Returns a Matrix.
344
- def map(&block); self.dup.map!(block) end
370
+ def map(block = Proc.new); self.dup.map!(block) end
345
371
 
346
372
  #--------------------- conversions -------------------------#
347
373
 
@@ -368,7 +394,7 @@ module GSLng
368
394
  return s
369
395
  end
370
396
 
371
- def inspect #:nodoc:
397
+ def inspect # @private
372
398
  "#{self}:Matrix"
373
399
  end
374
400
 
@@ -10,7 +10,7 @@ module GSLng
10
10
  attr_reader :owner # The Matrix owning the data this View uses
11
11
 
12
12
  # Create a MatrixView of the sub-matrix starting at (x,y), of size (m,n)
13
- def initialize(owner, x, y, m, n) #:nodoc:
13
+ def initialize(owner, x, y, m, n) # @private
14
14
  @owner = owner
15
15
  @m,@n = m,n
16
16
  @ptr = GSLng.backend::gsl_matrix_submatrix2(owner.ptr, x, y, m, n)
@@ -27,11 +27,11 @@ module GSLng
27
27
  alias_method :clone, :dup
28
28
  alias_method :to_matrix, :dup
29
29
 
30
- def view #:nodoc:
30
+ def view # @private
31
31
  raise "Can't create a View from a View"
32
32
  end
33
33
 
34
- def inspect #:nodoc:
34
+ def inspect # @private
35
35
  "#{self}:MatrixView"
36
36
  end
37
37
  end
@@ -14,7 +14,7 @@ module GSLng
14
14
  class Vector
15
15
  include Enumerable
16
16
 
17
- attr_reader :ptr # :nodoc:
17
+ attr_reader :ptr # @private
18
18
  attr_reader :size # Vector size
19
19
 
20
20
  #--------------------- constructors -------------------------#
@@ -26,10 +26,10 @@ module GSLng
26
26
  @size = n
27
27
  @ptr = (zero ? GSLng.backend::gsl_vector_calloc(n) : GSLng.backend::gsl_vector_alloc(n))
28
28
  GSLng.set_finalizer(self, :gsl_vector_free, @ptr)
29
- if (block_given?) then self.map_index!(&Proc.new) end
29
+ if (block_given?) then self.map_index!(Proc.new) end
30
30
  end
31
31
 
32
- def initialize_copy(other) #:nodoc:
32
+ def initialize_copy(other) # @private
33
33
  ObjectSpace.undefine_finalizer(self) # TODO: ruby bug?
34
34
 
35
35
  @size = other.size
@@ -149,6 +149,9 @@ module GSLng
149
149
  # Element-by-element division
150
150
  def /(other); self.dup.div!(other) end
151
151
 
152
+ # Invert sign on all elements
153
+ def -@; self.map!(&:-@) end
154
+
152
155
  #--------------------- other math -------------------------#
153
156
 
154
157
  # Dot product between self and other (uses BLAS's ddot)
@@ -209,13 +212,27 @@ module GSLng
209
212
  k,m = size.divmod(stride)
210
213
  size = k + (m == 0 ? 0 : 1)
211
214
  end
212
- View.new(self, offset, size, stride)
215
+
216
+ if (stride == 1) then ptr = GSLng.backend::gsl_vector_subvector2(self.ptr, offset, size)
217
+ else ptr = GSLng.backend::gsl_vector_subvector_with_stride2(self.ptr, offset, stride, size) end
218
+ View.new(ptr, self, offset, size)
213
219
  end
214
220
  alias_method :subvector_view, :view
215
221
 
216
222
  # Shorthand for #subvector_view(..).to_vector.
217
223
  def subvector(*args); subvector_view(*args).to_vector end
218
224
 
225
+ #------------ utility methods for 2D,3D and 4D vectors -----------#
226
+ def x; GSLng.backend::gsl_vector_get(self.ptr, 0) end
227
+ def y; GSLng.backend::gsl_vector_get(self.ptr, 1) end
228
+ def z; GSLng.backend::gsl_vector_get(self.ptr, 2) end
229
+ def w; GSLng.backend::gsl_vector_get(self.ptr, 3) end
230
+
231
+ def x=(v); GSLng.backend::gsl_vector_set(self.ptr, 0, v.to_f) end
232
+ def y=(v); GSLng.backend::gsl_vector_set(self.ptr, 1, v.to_f) end
233
+ def z=(v); GSLng.backend::gsl_vector_set(self.ptr, 2, v.to_f) end
234
+ def w=(v); GSLng.backend::gsl_vector_set(self.ptr, 3, v.to_f) end
235
+
219
236
  #--------------------- predicate methods -------------------------#
220
237
 
221
238
  # if all elements are zero
@@ -269,22 +286,25 @@ module GSLng
269
286
  end
270
287
 
271
288
  # Same as #each, but faster. The catch is that this method returns nothing.
272
- def fast_each(&block) #:yield: obj
289
+ def fast_each(block = Proc.new) #:yield: obj
273
290
  GSLng.backend::gsl_vector_each(self.ptr, block)
274
291
  end
275
292
 
276
- def fast_each_with_index(&block) #:yield: obj,i
293
+ def fast_each_with_index(block = Proc.new) #:yield: obj,i
277
294
  GSLng.backend::gsl_vector_each_with_index(self.ptr, block)
278
295
  end
279
296
 
280
297
  # Efficient map! implementation
281
- def map!(&block); GSLng.backend::gsl_vector_map(self.ptr, block); return self end
298
+ def map!(block = Proc.new); GSLng.backend::gsl_vector_map(self.ptr, block); return self end
282
299
 
283
300
  # Alternate version of #map!, in this case the block receives the index as a parameter.
284
- def map_index!(&block); GSLng.backend::gsl_vector_map_index(self.ptr, block); return self end
301
+ def map_index!(block = Proc.new); GSLng.backend::gsl_vector_map_index(self.ptr, block); return self end
285
302
 
286
303
  # See #map!. Returns a Vector.
287
- def map(&block); self.dup.map!(block) end
304
+ def map(block = Proc.new); self.dup.map!(block) end
305
+
306
+ # Same as #map but returns an Array
307
+ def map_array(block = Proc.new) ary = []; self.fast_each {|elem| ary << block.call(elem)}; return ary end
288
308
 
289
309
  #--------------------- conversions -------------------------#
290
310
 
@@ -314,7 +334,7 @@ module GSLng
314
334
  "[" + self.join(', ') + "]"
315
335
  end
316
336
 
317
- def inspect #:nodoc:
337
+ def inspect # @private
318
338
  "#{self}:Vector"
319
339
  end
320
340
 
@@ -2,21 +2,18 @@ module GSLng
2
2
  class Vector
3
3
  # A View of a Vector.
4
4
  #
5
- # Views reference an existing Vector and can be used to access parts of it without having to copy
6
- # it entirely. You can treat a View just like a Vector.
7
- # But note that modifying elements of a View will modify the elements of the original vector.
5
+ # Views reference an existing Vector (or a row/column from a Matrix) and can be used to access parts of it without
6
+ # having to copy it entirely. You can treat a View just like a Vector.
7
+ # But note that modifying elements of a View will modify the elements of the original Vector/Matrix.
8
8
  #
9
9
  class View < Vector
10
10
  attr_reader :owner # The Vector owning the data this View uses
11
-
12
- def initialize(owner, offset, size, stride = 1) #:nodoc:
13
- @owner = owner
14
- @size = size
15
- if (stride == 1) then @ptr = GSLng.backend::gsl_vector_subvector2(owner.ptr, offset, size)
16
- else @ptr = GSLng.backend::gsl_vector_subvector_with_stride2(owner.ptr, offset, stride, size) end
11
+
12
+ def initialize(ptr, owner, offset, size) # @private
13
+ @owner,@size,@ptr = owner,size,ptr
17
14
  GSLng.set_finalizer(self, :gsl_vector_free, @ptr)
18
15
  end
19
-
16
+
20
17
  # Returns a Vector (*NOT* a View) copied from this view. In other words,
21
18
  # you'll get a Vector which you can modify without modifying #owner elements
22
19
  def dup
@@ -27,11 +24,11 @@ module GSLng
27
24
  alias_method :clone, :dup
28
25
  alias_method :to_vector, :dup
29
26
 
30
- def view #:nodoc:
27
+ def view # @private
31
28
  raise "Can't create a View from a View"
32
29
  end
33
30
 
34
- def inspect #:nodoc:
31
+ def inspect # @private
35
32
  "#{self}:VectorView"
36
33
  end
37
34
  end
@@ -0,0 +1,38 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{ruby-gsl-ng}
5
+ s.version = "0.2.2"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["v01d"]
9
+ s.date = %q{2010-03-06}
10
+ s.description = %q{Ruby Object Oriented Graph LIbrary}
11
+ s.email = %q{}
12
+ s.extensions = ["ext/extconf.rb"]
13
+ s.extra_rdoc_files = ["README.rdoc", "TODO", "ext/extconf.rb", "ext/gslng_extensions.cpp", "lib/gslng.rb", "lib/gslng/backend.rb", "lib/gslng/backend_components/error_handling.rb", "lib/gslng/backend_components/matrix.rb", "lib/gslng/backend_components/vector.rb", "lib/gslng/finalizer.rb", "lib/gslng/matrix.rb", "lib/gslng/matrix_view.rb", "lib/gslng/vector.rb", "lib/gslng/vector_view.rb"]
14
+ s.files = ["History.txt", "README.rdoc", "Rakefile", "TODO", "ext/extconf.rb", "ext/gslng_extensions.cpp", "lib/gslng.rb", "lib/gslng/backend.rb", "lib/gslng/backend_components/error_handling.rb", "lib/gslng/backend_components/matrix.rb", "lib/gslng/backend_components/vector.rb", "lib/gslng/finalizer.rb", "lib/gslng/matrix.rb", "lib/gslng/matrix_view.rb", "lib/gslng/vector.rb", "lib/gslng/vector_view.rb", "ruby-gsl-ng.gemspec", "test/benchmark.rb", "test/matrix_test.rb", "test/test_gsl.rb", "test/vector_test.rb", "Manifest"]
15
+ s.homepage = %q{http://github.com/v01d/roogli}
16
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Ruby-gsl-ng", "--main", "README.rdoc"]
17
+ s.require_paths = ["lib", "ext"]
18
+ s.rubyforge_project = %q{ruby-gsl-ng}
19
+ s.rubygems_version = %q{1.3.6}
20
+ s.summary = %q{Ruby Object Oriented Graph LIbrary}
21
+ s.test_files = ["test/vector_test.rb", "test/test_gsl.rb", "test/matrix_test.rb"]
22
+
23
+ if s.respond_to? :specification_version then
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 3
26
+
27
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
+ s.add_runtime_dependency(%q<yard>, [">= 0"])
29
+ s.add_runtime_dependency(%q<ffi>, [">= 0"])
30
+ else
31
+ s.add_dependency(%q<yard>, [">= 0"])
32
+ s.add_dependency(%q<ffi>, [">= 0"])
33
+ end
34
+ else
35
+ s.add_dependency(%q<yard>, [">= 0"])
36
+ s.add_dependency(%q<ffi>, [">= 0"])
37
+ end
38
+ end
@@ -16,6 +16,7 @@ bm do |x|
16
16
  x.report("each :") {n.times {s = 0; v.each do |e| s += e end}}
17
17
  x.report("fast_each :") {n.times {s = 0; v.fast_each do |e| s += e end}}
18
18
  end
19
+ puts
19
20
 
20
21
  n = 500
21
22
  size = 50000
@@ -27,6 +28,7 @@ bm do |x|
27
28
  x.report("rb-gsl :") {n.times {gv.dnrm2}}
28
29
  x.report("GSLng :") {n.times {v.norm}}
29
30
  end
31
+ puts
30
32
 
31
33
  n=5000
32
34
  size = 5000
@@ -37,6 +39,7 @@ bm do |x|
37
39
  x.report("rb-gsl :") {n.times {gv.mul!(gv2)}}
38
40
  x.report("GSLng :") {n.times {v.mul!(v2)}}
39
41
  end
42
+ puts
40
43
 
41
44
  n=500
42
45
  size = 5000
@@ -47,3 +50,4 @@ bm do |x|
47
50
  x.report("rb-gsl :") {n.times {v.sort!}}
48
51
  x.report("GSLng :") {n.times {gv.sort!}}
49
52
  end
53
+ puts
@@ -41,6 +41,28 @@ class TestMatrix < Test::Unit::TestCase
41
41
  assert_equal(2, m[1,0])
42
42
  end
43
43
 
44
+ def test_each
45
+ m = Matrix[[1,2,3],[3,4,5]]
46
+ a = []
47
+ m.each {|e| a << e}
48
+ assert_equal([1,2,3,3,4,5], a)
49
+ a = []
50
+ m.each {|e| a << e}
51
+ assert_equal([1,2,3,3,4,5], a)
52
+ a = []
53
+ m.each_row {|r| r.each {|e| a << e}}
54
+ assert_equal([1,2,3,3,4,5], a)
55
+ a = []
56
+ m.each_column {|c| c.each {|e| a << e}}
57
+ assert_equal([1,3,2,4,3,5], a)
58
+ a = []
59
+ m.each_vec_row {|r| r.each {|e| a << e}}
60
+ assert_equal([1,2,3,3,4,5], a)
61
+ a = []
62
+ m.each_vec_column {|c| c.each {|e| a << e}}
63
+ assert_equal([1,3,2,4,3,5], a)
64
+ end
65
+
44
66
  def test_complex_get
45
67
  m = Matrix[[1,2,3],[2,3,4]]
46
68
  assert_equal(m, m[:*,:*])
@@ -21,6 +21,7 @@ class VectorTest < Test::Unit::TestCase
21
21
  assert_equal("[0.0]", Vector.zero(1).to_s)
22
22
  assert_equal("[0.0, 0.0, 0.0]", Vector.zero(3).to_s)
23
23
  assert_equal("[0.0, 1.0, 2.0]", Vector.new(3) {|i| i}.to_s)
24
+ assert_equal("[1.0, 2.0, 3.0]", Vector.new(3) {|i| i+1}.to_s)
24
25
  assert_equal("[1.0, 2.0, 3.0]", Vector[1,2,3].to_s)
25
26
  assert_equal("1.0 2.0 3.0", Vector[1,2,3].join(' '))
26
27
  end
@@ -33,6 +34,13 @@ class VectorTest < Test::Unit::TestCase
33
34
  assert_not_equal(Vector.zero(4), Vector.zero(3))
34
35
  end
35
36
 
37
+ def test_each
38
+ assert_equal([1,2,4], Vector[1.1,2.1,3.8].map_array(&:round))
39
+ assert_raise {Vector[1,2,3].fast_each}
40
+ assert_raise {Vector[1,2,3].each}
41
+ assert_equal(Vector[1,2,4],Vector[1.1,2.1,3.8].map!(&:round))
42
+ end
43
+
36
44
  def test_copies
37
45
  v1 = Vector[1,2,3]
38
46
  v2 = Vector[2,3,4]
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-gsl-ng
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 2
9
+ version: 0.2.2
5
10
  platform: ruby
6
11
  authors:
7
12
  - v01d
@@ -9,46 +14,59 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-01-05 00:00:00 -03:00
17
+ date: 2010-03-06 00:00:00 -03:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
- name: ffi
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
21
+ name: yard
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
23
29
  version: "0"
24
- version:
30
+ type: :runtime
31
+ version_requirements: *id001
25
32
  - !ruby/object:Gem::Dependency
26
- name: hoe
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
33
+ name: ffi
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: 2.4.0
34
- version:
35
- description: New-generation Ruby/GSL wrapper.
36
- email:
37
- - phreakuencies@gmail.com
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :runtime
43
+ version_requirements: *id002
44
+ description: Ruby Object Oriented Graph LIbrary
45
+ email: ""
38
46
  executables: []
39
47
 
40
48
  extensions:
41
49
  - ext/extconf.rb
42
50
  extra_rdoc_files:
43
- - History.txt
44
- - Manifest.txt
45
- - README.txt
51
+ - README.rdoc
52
+ - TODO
53
+ - ext/extconf.rb
54
+ - ext/gslng_extensions.cpp
55
+ - lib/gslng.rb
56
+ - lib/gslng/backend.rb
57
+ - lib/gslng/backend_components/error_handling.rb
58
+ - lib/gslng/backend_components/matrix.rb
59
+ - lib/gslng/backend_components/vector.rb
60
+ - lib/gslng/finalizer.rb
61
+ - lib/gslng/matrix.rb
62
+ - lib/gslng/matrix_view.rb
63
+ - lib/gslng/vector.rb
64
+ - lib/gslng/vector_view.rb
46
65
  files:
47
- - .autotest
48
66
  - History.txt
49
- - Manifest.txt
50
- - README.txt
67
+ - README.rdoc
51
68
  - Rakefile
69
+ - TODO
52
70
  - ext/extconf.rb
53
71
  - ext/gslng_extensions.cpp
54
72
  - lib/gslng.rb
@@ -61,18 +79,24 @@ files:
61
79
  - lib/gslng/matrix_view.rb
62
80
  - lib/gslng/vector.rb
63
81
  - lib/gslng/vector_view.rb
82
+ - ruby-gsl-ng.gemspec
64
83
  - test/benchmark.rb
65
84
  - test/matrix_test.rb
66
85
  - test/test_gsl.rb
67
86
  - test/vector_test.rb
87
+ - Manifest
68
88
  has_rdoc: true
69
- homepage: http://ruby-gsl-ng.googlecode.com
89
+ homepage: http://github.com/v01d/roogli
70
90
  licenses: []
71
91
 
72
92
  post_install_message:
73
93
  rdoc_options:
94
+ - --line-numbers
95
+ - --inline-source
96
+ - --title
97
+ - Ruby-gsl-ng
74
98
  - --main
75
- - README.txt
99
+ - README.rdoc
76
100
  require_paths:
77
101
  - lib
78
102
  - ext
@@ -80,20 +104,25 @@ required_ruby_version: !ruby/object:Gem::Requirement
80
104
  requirements:
81
105
  - - ">="
82
106
  - !ruby/object:Gem::Version
107
+ segments:
108
+ - 0
83
109
  version: "0"
84
- version:
85
110
  required_rubygems_version: !ruby/object:Gem::Requirement
86
111
  requirements:
87
112
  - - ">="
88
113
  - !ruby/object:Gem::Version
89
- version: "0"
90
- version:
114
+ segments:
115
+ - 1
116
+ - 2
117
+ version: "1.2"
91
118
  requirements: []
92
119
 
93
120
  rubyforge_project: ruby-gsl-ng
94
- rubygems_version: 1.3.5
121
+ rubygems_version: 1.3.6
95
122
  signing_key:
96
123
  specification_version: 3
97
- summary: New-generation Ruby/GSL wrapper.
124
+ summary: Ruby Object Oriented Graph LIbrary
98
125
  test_files:
126
+ - test/vector_test.rb
99
127
  - test/test_gsl.rb
128
+ - test/matrix_test.rb
data/.autotest DELETED
@@ -1,23 +0,0 @@
1
- # -*- ruby -*-
2
-
3
- require 'autotest/restart'
4
-
5
- # Autotest.add_hook :initialize do |at|
6
- # at.extra_files << "../some/external/dependency.rb"
7
- #
8
- # at.libs << ":../some/external"
9
- #
10
- # at.add_exception 'vendor'
11
- #
12
- # at.add_mapping(/dependency.rb/) do |f, _|
13
- # at.files_matching(/test_.*rb$/)
14
- # end
15
- #
16
- # %w(TestA TestB).each do |klass|
17
- # at.extra_class_map[klass] = "test/test_misc.rb"
18
- # end
19
- # end
20
-
21
- # Autotest.add_hook :run_command do |at|
22
- # system "rake build"
23
- # end