wector 0.0.3 → 0.0.4

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.
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