wector 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: af75df7e08d5f55b00bab2d8d60045b3dba237a6
4
- data.tar.gz: f91fcb8821ba7bc30342c9c299f7a70f3c32c544
3
+ metadata.gz: 0613c1e66c0f9851a255f769abe58b3f7f66b92f
4
+ data.tar.gz: f2aa4eee978e2b52983b2df26a5c944c9a888683
5
5
  SHA512:
6
- metadata.gz: dd1090d7821a26e93789b20d2e9b45559d968caf97bbe2a981d7c5a6d130fa63cf509fcf1301a24754ddca1181ee9022031b596680827bb566ae691c04889fe7
7
- data.tar.gz: d14805939d4f2d016d3b2ddfb0d6364e6198c5b6789d2cc48c00c35de21b20756fcc3e200dfcb9b4d110a1e3bf69a43afc26ce463a88000687b132e6125a36de
6
+ metadata.gz: 1daeda348061db6b1f155933f94f80d700993a9ba9dbd0e38175aff5db4386b63e7330e0b616a1a343218f4be1224951575777c4793ef34b699c44fbb00b16ee
7
+ data.tar.gz: 0cd1e7cea379ae9c8731a63f12d4223ebce60efe9bc45610ce16e398d52280a0251b2348e979671df7184ecde3c5dd7683a8cc94c05d5411a3426369a9ade5cf
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - jruby-18mode # JRuby in 1.8 mode
5
+ - jruby-19mode # JRuby in 1.9 mode
6
+ - rbx-18mode
7
+ - rbx-19mode
8
+ - 1.8.7
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # Wector
2
+ [![Build Status](https://travis-ci.org/Qard/wector.png)](https://travis-ci.org/Qard/wector)
2
3
 
3
4
  Wector does what we all wish the built-in Vector class did; it makes vector math easy by allowing any method of the Numeric interface to be used to combine two arrays or an array and a number.
4
5
 
data/Rakefile CHANGED
@@ -1,3 +1,7 @@
1
+ task :build do
2
+ `cd src && ruby build.rb`
3
+ end
4
+
1
5
  require "bundler/gem_tasks"
2
6
  require 'rake/testtask'
3
7
 
@@ -1,4 +1,8 @@
1
1
  class Wector < Array
2
+
3
+ #
4
+ # wector.[]
5
+ #
2
6
  def [](*args)
3
7
  args.each do |arg|
4
8
  raise "Non-numeric item" unless arg.is_a?(Integer) or arg.is_a?(Float)
@@ -371,60 +375,6 @@ class Wector < Array
371
375
  end
372
376
  end
373
377
 
374
- #
375
- # wector.gcd
376
- #
377
- # Arguments:
378
- # other: (Array)
379
- #
380
- def gcd(other)
381
- if other.is_a? Array
382
- raise "Incorrect Dimensions" unless self.size == other.size
383
- other = other.dup
384
- self.class.new(map { |i| i.gcd other.shift })
385
- elsif other.is_a?(Integer) or other.is_a?(Float)
386
- self.class.new(map { |i| i.gcd other })
387
- else
388
- super
389
- end
390
- end
391
-
392
- #
393
- # wector.gcdlcm
394
- #
395
- # Arguments:
396
- # other: (Array)
397
- #
398
- def gcdlcm(other)
399
- if other.is_a? Array
400
- raise "Incorrect Dimensions" unless self.size == other.size
401
- other = other.dup
402
- self.class.new(map { |i| i.gcdlcm other.shift })
403
- elsif other.is_a?(Integer) or other.is_a?(Float)
404
- self.class.new(map { |i| i.gcdlcm other })
405
- else
406
- super
407
- end
408
- end
409
-
410
- #
411
- # wector.lcm
412
- #
413
- # Arguments:
414
- # other: (Array)
415
- #
416
- def lcm(other)
417
- if other.is_a? Array
418
- raise "Incorrect Dimensions" unless self.size == other.size
419
- other = other.dup
420
- self.class.new(map { |i| i.lcm other.shift })
421
- elsif other.is_a?(Integer) or other.is_a?(Float)
422
- self.class.new(map { |i| i.lcm other })
423
- else
424
- super
425
- end
426
- end
427
-
428
378
  #
429
379
  # wector.quo
430
380
  #
@@ -443,24 +393,6 @@ class Wector < Array
443
393
  end
444
394
  end
445
395
 
446
- #
447
- # wector.rationalize
448
- #
449
- # Arguments:
450
- # other: (Array)
451
- #
452
- def rationalize(other)
453
- if other.is_a? Array
454
- raise "Incorrect Dimensions" unless self.size == other.size
455
- other = other.dup
456
- self.class.new(map { |i| i.rationalize other.shift })
457
- elsif other.is_a?(Integer) or other.is_a?(Float)
458
- self.class.new(map { |i| i.rationalize other })
459
- else
460
- super
461
- end
462
- end
463
-
464
396
  #
465
397
  # wector.remainder
466
398
  #
@@ -479,24 +411,6 @@ class Wector < Array
479
411
  end
480
412
  end
481
413
 
482
- #
483
- # wector.round
484
- #
485
- # Arguments:
486
- # other: (Array)
487
- #
488
- def round(other)
489
- if other.is_a? Array
490
- raise "Incorrect Dimensions" unless self.size == other.size
491
- other = other.dup
492
- self.class.new(map { |i| i.round other.shift })
493
- elsif other.is_a?(Integer) or other.is_a?(Float)
494
- self.class.new(map { |i| i.round other })
495
- else
496
- super
497
- end
498
- end
499
-
500
414
 
501
415
  #
502
416
  # wector.ceil
@@ -512,62 +426,6 @@ class Wector < Array
512
426
  self.class.new(map { |i| i.abs })
513
427
  end
514
428
 
515
- #
516
- # wector.abs2
517
- #
518
- def abs2
519
- self.class.new(map { |i| i.abs2 })
520
- end
521
-
522
- #
523
- # wector.magnitude
524
- #
525
- def magnitude
526
- self.class.new(map { |i| i.magnitude })
527
- end
528
-
529
- #
530
- # wector.arg
531
- #
532
- def arg
533
- self.class.new(map { |i| i.arg })
534
- end
535
-
536
- #
537
- # wector.angle
538
- #
539
- def angle
540
- self.class.new(map { |i| i.angle })
541
- end
542
-
543
- #
544
- # wector.phase
545
- #
546
- def phase
547
- self.class.new(map { |i| i.phase })
548
- end
549
-
550
- #
551
- # wector.conj
552
- #
553
- def conj
554
- self.class.new(map { |i| i.conj })
555
- end
556
-
557
- #
558
- # wector.conjugate
559
- #
560
- def conjugate
561
- self.class.new(map { |i| i.conjugate })
562
- end
563
-
564
- #
565
- # wector.denominator
566
- #
567
- def denominator
568
- self.class.new(map { |i| i.denominator })
569
- end
570
-
571
429
  #
572
430
  # wector.even?
573
431
  #
@@ -582,20 +440,6 @@ class Wector < Array
582
440
  self.class.new(map { |i| i.floor })
583
441
  end
584
442
 
585
- #
586
- # wector.imag
587
- #
588
- def imag
589
- self.class.new(map { |i| i.imag })
590
- end
591
-
592
- #
593
- # wector.imaginary
594
- #
595
- def imaginary
596
- self.class.new(map { |i| i.imaginary })
597
- end
598
-
599
443
  #
600
444
  # wector.integer?
601
445
  #
@@ -617,20 +461,6 @@ class Wector < Array
617
461
  self.class.new(map { |i| i.odd? })
618
462
  end
619
463
 
620
- #
621
- # wector.numerator
622
- #
623
- def numerator
624
- self.class.new(map { |i| i.numerator })
625
- end
626
-
627
- #
628
- # wector.polar
629
- #
630
- def polar
631
- self.class.new(map { |i| i.polar })
632
- end
633
-
634
464
  #
635
465
  # wector.pred
636
466
  #
@@ -638,27 +468,6 @@ class Wector < Array
638
468
  self.class.new(map { |i| i.pred })
639
469
  end
640
470
 
641
- #
642
- # wector.real
643
- #
644
- def real
645
- self.class.new(map { |i| i.real })
646
- end
647
-
648
- #
649
- # wector.real?
650
- #
651
- def real?
652
- self.class.new(map { |i| i.real? })
653
- end
654
-
655
- #
656
- # wector.rect
657
- #
658
- def rect
659
- self.class.new(map { |i| i.rect })
660
- end
661
-
662
471
  #
663
472
  # wector.truncate
664
473
  #
@@ -673,6 +482,208 @@ class Wector < Array
673
482
  self.class.new(map { |i| i.zero? })
674
483
  end
675
484
 
485
+
486
+ # Only support 1.9+ features when available
487
+ v = RUBY_VERSION.split('.')
488
+ if v[0].to_i > 1 or v[1].to_i > 8
489
+
490
+ #
491
+ # wector.gcd
492
+ #
493
+ # Arguments:
494
+ # other: (Array)
495
+ #
496
+ def gcd(other)
497
+ if other.is_a? Array
498
+ raise "Incorrect Dimensions" unless self.size == other.size
499
+ other = other.dup
500
+ self.class.new(map { |i| i.gcd other.shift })
501
+ elsif other.is_a?(Integer) or other.is_a?(Float)
502
+ self.class.new(map { |i| i.gcd other })
503
+ else
504
+ super
505
+ end
506
+ end
507
+
508
+ #
509
+ # wector.gcdlcm
510
+ #
511
+ # Arguments:
512
+ # other: (Array)
513
+ #
514
+ def gcdlcm(other)
515
+ if other.is_a? Array
516
+ raise "Incorrect Dimensions" unless self.size == other.size
517
+ other = other.dup
518
+ self.class.new(map { |i| i.gcdlcm other.shift })
519
+ elsif other.is_a?(Integer) or other.is_a?(Float)
520
+ self.class.new(map { |i| i.gcdlcm other })
521
+ else
522
+ super
523
+ end
524
+ end
525
+
526
+ #
527
+ # wector.lcm
528
+ #
529
+ # Arguments:
530
+ # other: (Array)
531
+ #
532
+ def lcm(other)
533
+ if other.is_a? Array
534
+ raise "Incorrect Dimensions" unless self.size == other.size
535
+ other = other.dup
536
+ self.class.new(map { |i| i.lcm other.shift })
537
+ elsif other.is_a?(Integer) or other.is_a?(Float)
538
+ self.class.new(map { |i| i.lcm other })
539
+ else
540
+ super
541
+ end
542
+ end
543
+
544
+ #
545
+ # wector.rationalize
546
+ #
547
+ # Arguments:
548
+ # other: (Array)
549
+ #
550
+ def rationalize(other)
551
+ if other.is_a? Array
552
+ raise "Incorrect Dimensions" unless self.size == other.size
553
+ other = other.dup
554
+ self.class.new(map { |i| i.rationalize other.shift })
555
+ elsif other.is_a?(Integer) or other.is_a?(Float)
556
+ self.class.new(map { |i| i.rationalize other })
557
+ else
558
+ super
559
+ end
560
+ end
561
+
562
+ #
563
+ # wector.round
564
+ #
565
+ # Arguments:
566
+ # other: (Array)
567
+ #
568
+ def round(other)
569
+ if other.is_a? Array
570
+ raise "Incorrect Dimensions" unless self.size == other.size
571
+ other = other.dup
572
+ self.class.new(map { |i| i.round other.shift })
573
+ elsif other.is_a?(Integer) or other.is_a?(Float)
574
+ self.class.new(map { |i| i.round other })
575
+ else
576
+ super
577
+ end
578
+ end
579
+
580
+
581
+ #
582
+ # wector.abs2
583
+ #
584
+ def abs2
585
+ self.class.new(map { |i| i.abs2 })
586
+ end
587
+
588
+ #
589
+ # wector.arg
590
+ #
591
+ def arg
592
+ self.class.new(map { |i| i.arg })
593
+ end
594
+
595
+ #
596
+ # wector.angle
597
+ #
598
+ def angle
599
+ self.class.new(map { |i| i.angle })
600
+ end
601
+
602
+ #
603
+ # wector.conj
604
+ #
605
+ def conj
606
+ self.class.new(map { |i| i.conj })
607
+ end
608
+
609
+ #
610
+ # wector.conjugate
611
+ #
612
+ def conjugate
613
+ self.class.new(map { |i| i.conjugate })
614
+ end
615
+
616
+ #
617
+ # wector.denominator
618
+ #
619
+ def denominator
620
+ self.class.new(map { |i| i.denominator })
621
+ end
622
+
623
+ #
624
+ # wector.imag
625
+ #
626
+ def imag
627
+ self.class.new(map { |i| i.imag })
628
+ end
629
+
630
+ #
631
+ # wector.imaginary
632
+ #
633
+ def imaginary
634
+ self.class.new(map { |i| i.imaginary })
635
+ end
636
+
637
+ #
638
+ # wector.magnitude
639
+ #
640
+ def magnitude
641
+ self.class.new(map { |i| i.magnitude })
642
+ end
643
+
644
+ #
645
+ # wector.numerator
646
+ #
647
+ def numerator
648
+ self.class.new(map { |i| i.numerator })
649
+ end
650
+
651
+ #
652
+ # wector.phase
653
+ #
654
+ def phase
655
+ self.class.new(map { |i| i.phase })
656
+ end
657
+
658
+ #
659
+ # wector.polar
660
+ #
661
+ def polar
662
+ self.class.new(map { |i| i.polar })
663
+ end
664
+
665
+ #
666
+ # wector.real
667
+ #
668
+ def real
669
+ self.class.new(map { |i| i.real })
670
+ end
671
+
672
+ #
673
+ # wector.real?
674
+ #
675
+ def real?
676
+ self.class.new(map { |i| i.real? })
677
+ end
678
+
679
+ #
680
+ # wector.rect
681
+ #
682
+ def rect
683
+ self.class.new(map { |i| i.rect })
684
+ end
685
+
686
+ end
676
687
  end
677
688
 
678
689
  # Add interface to convert arrays to vectors
@@ -5,14 +5,21 @@ operator_methods = [
5
5
  ]
6
6
 
7
7
  comparison_methods = [
8
- :modulo, :coerce, :div, :divmod, :eql?, :fdiv, :gcd, :gcdlcm, :lcm, :quo,
9
- :rationalize, :remainder, :round
8
+ :modulo, :coerce, :div, :divmod, :eql?, :fdiv, :quo, :remainder
10
9
  ]
11
10
 
12
11
  transform_methods = [
13
- :ceil, :abs, :abs2, :magnitude, :arg, :angle, :phase, :conj, :conjugate,
14
- :denominator, :even?, :floor, :imag, :imaginary, :integer?, :nonzero?,
15
- :odd?, :numerator, :polar, :pred, :real, :real?, :rect, :truncate, :zero?
12
+ :ceil, :abs, :even?, :floor, :integer?, :nonzero?,
13
+ :odd?, :pred, :truncate, :zero?
14
+ ]
15
+
16
+ new_comparison_methods = [
17
+ :gcd, :gcdlcm, :lcm, :rationalize, :round
18
+ ]
19
+
20
+ new_transform_methods = [
21
+ :abs2, :arg, :angle, :conj, :conjugate, :denominator, :imag, :imaginary,
22
+ :magnitude, :numerator, :phase, :polar, :real, :real?, :rect
16
23
  ]
17
24
 
18
25
  operator_tests = {
@@ -42,14 +49,16 @@ unary_operator_tests = {
42
49
  plus: '+'
43
50
  }
44
51
 
45
- base_folder = File.join(File.dirname(__FILE__), '..')
52
+ base_folder = File.dirname(__FILE__)
46
53
 
47
54
  # Generate lib/wector.rb
48
- File.open(File.join(base_folder, 'lib', 'wector.rb'), 'w') do |file|
49
- file.write ERB.new(File.read('wector.erb'), 0, "%<>").result
55
+ File.open(File.join(base_folder, '..', 'lib', 'wector.rb'), 'w') do |file|
56
+ template = File.read(File.join(base_folder, 'wector.erb'))
57
+ file.write ERB.new(template, 0, "%<>").result
50
58
  end
51
59
 
52
60
  # Generate tests/basic.rb
53
- File.open(File.join(base_folder, 'test', 'test_basic.rb'), 'w') do |file|
54
- file.write ERB.new(File.read('test.erb'), 0, "%<>").result
61
+ File.open(File.join(base_folder, '..', 'test', 'test_basic.rb'), 'w') do |file|
62
+ template = File.read(File.join(base_folder, 'test.erb'))
63
+ file.write ERB.new(template, 0, "%<>").result
55
64
  end
@@ -34,4 +34,20 @@ class BasicTest < Test::Unit::TestCase
34
34
  assert_equal (nums.<%= name %>), nums.map { |v| v.<%= name %> }
35
35
  end
36
36
  <% end %>
37
+
38
+ # Only support 1.9+ features when available
39
+ v = RUBY_VERSION.split('.')
40
+ if v[0].to_i > 1 or v[1].to_i > 8
41
+ <% new_comparison_methods.each do |name| %>
42
+ def test_<%= name %>
43
+ nums = (1..100).to_a.to_wector
44
+ assert_equal (nums.<%= name %> nums), nums.map { |v| v.<%= name %> v }
45
+ end
46
+ <% end %><% new_transform_methods.each do |name| %>
47
+ def test_<%= name %>
48
+ nums = (1..100).to_a.to_wector
49
+ assert_equal (nums.<%= name %>), nums.map { |v| v.<%= name %> }
50
+ end
51
+ <% end %>
52
+ end
37
53
  end
@@ -70,6 +70,38 @@ class Wector < Array
70
70
  self.class.new(map { |i| i.<%= attr_name %> })
71
71
  end
72
72
  <% end %>
73
+
74
+ # Only support 1.9+ features when available
75
+ v = RUBY_VERSION.split('.')
76
+ if v[0].to_i > 1 or v[1].to_i > 8
77
+ <% new_comparison_methods.map { |v| v.to_s }.each do |attr_name| %>
78
+ #
79
+ # wector.<%= attr_name %>
80
+ #
81
+ # Arguments:
82
+ # other: (Array)
83
+ #
84
+ def <%= attr_name %>(other)
85
+ if other.is_a? Array
86
+ raise "Incorrect Dimensions" unless self.size == other.size
87
+ other = other.dup
88
+ self.class.new(map { |i| i.<%= attr_name %> other.shift })
89
+ elsif other.is_a?(Integer) or other.is_a?(Float)
90
+ self.class.new(map { |i| i.<%= attr_name %> other })
91
+ else
92
+ super
93
+ end
94
+ end
95
+ <% end %>
96
+ <% new_transform_methods.map { |v| v.to_s }.each do |attr_name| %>
97
+ #
98
+ # wector.<%= attr_name %>
99
+ #
100
+ def <%= attr_name %>
101
+ self.class.new(map { |i| i.<%= attr_name %> })
102
+ end
103
+ <% end %>
104
+ end
73
105
  end
74
106
 
75
107
  # Add interface to convert arrays to vectors
@@ -124,41 +124,16 @@ class BasicTest < Test::Unit::TestCase
124
124
  assert_equal (nums.fdiv nums), nums.map { |v| v.fdiv v }
125
125
  end
126
126
 
127
- def test_gcd
128
- nums = (1..100).to_a.to_wector
129
- assert_equal (nums.gcd nums), nums.map { |v| v.gcd v }
130
- end
131
-
132
- def test_gcdlcm
133
- nums = (1..100).to_a.to_wector
134
- assert_equal (nums.gcdlcm nums), nums.map { |v| v.gcdlcm v }
135
- end
136
-
137
- def test_lcm
138
- nums = (1..100).to_a.to_wector
139
- assert_equal (nums.lcm nums), nums.map { |v| v.lcm v }
140
- end
141
-
142
127
  def test_quo
143
128
  nums = (1..100).to_a.to_wector
144
129
  assert_equal (nums.quo nums), nums.map { |v| v.quo v }
145
130
  end
146
131
 
147
- def test_rationalize
148
- nums = (1..100).to_a.to_wector
149
- assert_equal (nums.rationalize nums), nums.map { |v| v.rationalize v }
150
- end
151
-
152
132
  def test_remainder
153
133
  nums = (1..100).to_a.to_wector
154
134
  assert_equal (nums.remainder nums), nums.map { |v| v.remainder v }
155
135
  end
156
136
 
157
- def test_round
158
- nums = (1..100).to_a.to_wector
159
- assert_equal (nums.round nums), nums.map { |v| v.round v }
160
- end
161
-
162
137
  def test_ceil
163
138
  nums = (1..100).to_a.to_wector
164
139
  assert_equal (nums.ceil), nums.map { |v| v.ceil }
@@ -169,46 +144,6 @@ class BasicTest < Test::Unit::TestCase
169
144
  assert_equal (nums.abs), nums.map { |v| v.abs }
170
145
  end
171
146
 
172
- def test_abs2
173
- nums = (1..100).to_a.to_wector
174
- assert_equal (nums.abs2), nums.map { |v| v.abs2 }
175
- end
176
-
177
- def test_magnitude
178
- nums = (1..100).to_a.to_wector
179
- assert_equal (nums.magnitude), nums.map { |v| v.magnitude }
180
- end
181
-
182
- def test_arg
183
- nums = (1..100).to_a.to_wector
184
- assert_equal (nums.arg), nums.map { |v| v.arg }
185
- end
186
-
187
- def test_angle
188
- nums = (1..100).to_a.to_wector
189
- assert_equal (nums.angle), nums.map { |v| v.angle }
190
- end
191
-
192
- def test_phase
193
- nums = (1..100).to_a.to_wector
194
- assert_equal (nums.phase), nums.map { |v| v.phase }
195
- end
196
-
197
- def test_conj
198
- nums = (1..100).to_a.to_wector
199
- assert_equal (nums.conj), nums.map { |v| v.conj }
200
- end
201
-
202
- def test_conjugate
203
- nums = (1..100).to_a.to_wector
204
- assert_equal (nums.conjugate), nums.map { |v| v.conjugate }
205
- end
206
-
207
- def test_denominator
208
- nums = (1..100).to_a.to_wector
209
- assert_equal (nums.denominator), nums.map { |v| v.denominator }
210
- end
211
-
212
147
  def test_even?
213
148
  nums = (1..100).to_a.to_wector
214
149
  assert_equal (nums.even?), nums.map { |v| v.even? }
@@ -219,16 +154,6 @@ class BasicTest < Test::Unit::TestCase
219
154
  assert_equal (nums.floor), nums.map { |v| v.floor }
220
155
  end
221
156
 
222
- def test_imag
223
- nums = (1..100).to_a.to_wector
224
- assert_equal (nums.imag), nums.map { |v| v.imag }
225
- end
226
-
227
- def test_imaginary
228
- nums = (1..100).to_a.to_wector
229
- assert_equal (nums.imaginary), nums.map { |v| v.imaginary }
230
- end
231
-
232
157
  def test_integer?
233
158
  nums = (1..100).to_a.to_wector
234
159
  assert_equal (nums.integer?), nums.map { |v| v.integer? }
@@ -244,36 +169,11 @@ class BasicTest < Test::Unit::TestCase
244
169
  assert_equal (nums.odd?), nums.map { |v| v.odd? }
245
170
  end
246
171
 
247
- def test_numerator
248
- nums = (1..100).to_a.to_wector
249
- assert_equal (nums.numerator), nums.map { |v| v.numerator }
250
- end
251
-
252
- def test_polar
253
- nums = (1..100).to_a.to_wector
254
- assert_equal (nums.polar), nums.map { |v| v.polar }
255
- end
256
-
257
172
  def test_pred
258
173
  nums = (1..100).to_a.to_wector
259
174
  assert_equal (nums.pred), nums.map { |v| v.pred }
260
175
  end
261
176
 
262
- def test_real
263
- nums = (1..100).to_a.to_wector
264
- assert_equal (nums.real), nums.map { |v| v.real }
265
- end
266
-
267
- def test_real?
268
- nums = (1..100).to_a.to_wector
269
- assert_equal (nums.real?), nums.map { |v| v.real? }
270
- end
271
-
272
- def test_rect
273
- nums = (1..100).to_a.to_wector
274
- assert_equal (nums.rect), nums.map { |v| v.rect }
275
- end
276
-
277
177
  def test_truncate
278
178
  nums = (1..100).to_a.to_wector
279
179
  assert_equal (nums.truncate), nums.map { |v| v.truncate }
@@ -284,4 +184,110 @@ class BasicTest < Test::Unit::TestCase
284
184
  assert_equal (nums.zero?), nums.map { |v| v.zero? }
285
185
  end
286
186
 
187
+
188
+ # Only support 1.9+ features when available
189
+ v = RUBY_VERSION.split('.')
190
+ if v[0].to_i > 1 or v[1].to_i > 8
191
+
192
+ def test_gcd
193
+ nums = (1..100).to_a.to_wector
194
+ assert_equal (nums.gcd nums), nums.map { |v| v.gcd v }
195
+ end
196
+
197
+ def test_gcdlcm
198
+ nums = (1..100).to_a.to_wector
199
+ assert_equal (nums.gcdlcm nums), nums.map { |v| v.gcdlcm v }
200
+ end
201
+
202
+ def test_lcm
203
+ nums = (1..100).to_a.to_wector
204
+ assert_equal (nums.lcm nums), nums.map { |v| v.lcm v }
205
+ end
206
+
207
+ def test_rationalize
208
+ nums = (1..100).to_a.to_wector
209
+ assert_equal (nums.rationalize nums), nums.map { |v| v.rationalize v }
210
+ end
211
+
212
+ def test_round
213
+ nums = (1..100).to_a.to_wector
214
+ assert_equal (nums.round nums), nums.map { |v| v.round v }
215
+ end
216
+
217
+ def test_abs2
218
+ nums = (1..100).to_a.to_wector
219
+ assert_equal (nums.abs2), nums.map { |v| v.abs2 }
220
+ end
221
+
222
+ def test_arg
223
+ nums = (1..100).to_a.to_wector
224
+ assert_equal (nums.arg), nums.map { |v| v.arg }
225
+ end
226
+
227
+ def test_angle
228
+ nums = (1..100).to_a.to_wector
229
+ assert_equal (nums.angle), nums.map { |v| v.angle }
230
+ end
231
+
232
+ def test_conj
233
+ nums = (1..100).to_a.to_wector
234
+ assert_equal (nums.conj), nums.map { |v| v.conj }
235
+ end
236
+
237
+ def test_conjugate
238
+ nums = (1..100).to_a.to_wector
239
+ assert_equal (nums.conjugate), nums.map { |v| v.conjugate }
240
+ end
241
+
242
+ def test_denominator
243
+ nums = (1..100).to_a.to_wector
244
+ assert_equal (nums.denominator), nums.map { |v| v.denominator }
245
+ end
246
+
247
+ def test_imag
248
+ nums = (1..100).to_a.to_wector
249
+ assert_equal (nums.imag), nums.map { |v| v.imag }
250
+ end
251
+
252
+ def test_imaginary
253
+ nums = (1..100).to_a.to_wector
254
+ assert_equal (nums.imaginary), nums.map { |v| v.imaginary }
255
+ end
256
+
257
+ def test_magnitude
258
+ nums = (1..100).to_a.to_wector
259
+ assert_equal (nums.magnitude), nums.map { |v| v.magnitude }
260
+ end
261
+
262
+ def test_numerator
263
+ nums = (1..100).to_a.to_wector
264
+ assert_equal (nums.numerator), nums.map { |v| v.numerator }
265
+ end
266
+
267
+ def test_phase
268
+ nums = (1..100).to_a.to_wector
269
+ assert_equal (nums.phase), nums.map { |v| v.phase }
270
+ end
271
+
272
+ def test_polar
273
+ nums = (1..100).to_a.to_wector
274
+ assert_equal (nums.polar), nums.map { |v| v.polar }
275
+ end
276
+
277
+ def test_real
278
+ nums = (1..100).to_a.to_wector
279
+ assert_equal (nums.real), nums.map { |v| v.real }
280
+ end
281
+
282
+ def test_real?
283
+ nums = (1..100).to_a.to_wector
284
+ assert_equal (nums.real?), nums.map { |v| v.real? }
285
+ end
286
+
287
+ def test_rect
288
+ nums = (1..100).to_a.to_wector
289
+ assert_equal (nums.rect), nums.map { |v| v.rect }
290
+ end
291
+
292
+ end
287
293
  end
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  Gem::Specification.new do |spec|
3
3
  spec.name = "wector"
4
- spec.version = "0.0.3"
4
+ spec.version = "0.0.4"
5
5
  spec.authors = ["Stephen Belanger"]
6
6
  spec.email = ["admin@stephenbelanger.com"]
7
7
  spec.description = %q{
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Belanger
@@ -48,6 +48,7 @@ extensions: []
48
48
  extra_rdoc_files: []
49
49
  files:
50
50
  - .gitignore
51
+ - .travis.yml
51
52
  - Gemfile
52
53
  - LICENSE.txt
53
54
  - README.md