quaternion_c2 0.9.0 → 1.0.0

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
  SHA256:
3
- metadata.gz: 7db82b9a71381584904b5b2524a76f8f352eeb5b34ca834374c4bce5d370b959
4
- data.tar.gz: 987d2a9893ef41f0d079931931a648e853d31ae4b54c9822d3179ab8c0bf459d
3
+ metadata.gz: 2d786fc0057f8807e1a12a9c55c19e124fa7edd24eccf3d686c1a927685c01bc
4
+ data.tar.gz: a98e2aaed384903bff5a13b844b5097b88f360a1ed8a182b2a1a774b45e46d8e
5
5
  SHA512:
6
- metadata.gz: a37154fffef6c3a892040f0762ecfb644e0d966fdc091e9e532102fddea4234c86cd03dcf510ccaf865c9e8e1f3dfa85da3ff796fa76dedf79cf16c858e7dd22
7
- data.tar.gz: 7cf6bd82f8abae76704202a7c891e88111074428571dfa5fa6e61914248c0ace059d6be84d055450bd8d9be7372dc3e812786acaf53f14297b50f722d2cd4197
6
+ metadata.gz: 45c7c781395f45cb8a0adc3acb2e2a6c0c6f7d58e03a14da74490080048146aee760a5835eb524f1c02a4dce77d3bfbc2f008aa88b89754394d57900c34eaca8
7
+ data.tar.gz: 3afc20e3e7b5fe2874343ade34e6550f862a1f21cb097ff3b403465f63b4364d1dc050748219fdac26b0328310eb995dd1fbf38598cd4d76cc12e5fb346ce92f
@@ -0,0 +1,29 @@
1
+ name: Test
2
+
3
+ on:
4
+ push: {}
5
+ pull_request: {}
6
+ schedule:
7
+ - cron: '45 23 1 * *' # Monthly check
8
+
9
+ jobs:
10
+ unit-test:
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ ruby: [ '2.1', '2.2', '2.3', '2.4', '2.5', '2.6', '2.7',
15
+ '3.0', '3.1', '3.2',
16
+ head ]
17
+ runs-on: ubuntu-latest
18
+ name: Unit test with Ruby ${{ matrix.ruby }}
19
+ steps:
20
+ - name: Checkout repository
21
+ uses: actions/checkout@v3
22
+ - name: Setup Ruby
23
+ uses: ruby/setup-ruby@v1
24
+ with:
25
+ ruby-version: ${{ matrix.ruby }}
26
+ bundler-cache: true
27
+ - name: Run RSpec
28
+ run: |
29
+ bundle exec rake spec
@@ -83,7 +83,8 @@ class Quaternion
83
83
  [:quo, :fdiv].each do |sym|
84
84
  define_method(sym) do |other|
85
85
  if other.kind_of?(Quaternion)
86
- self * other.conj.send(sym, other.abs2)
86
+ n = self * other.conj.send(sym, other.abs2)
87
+ __new__(n.a / 1, n.b / 1) # Canonicalize rationals as Complex does
87
88
  elsif other.kind_of?(Numeric) && other.complex?
88
89
  __new__(@a.send(sym, other), @b.send(sym, other.conj))
89
90
  else
@@ -0,0 +1,55 @@
1
+ require_relative 'base'
2
+ require_relative 'arithmetic' # define Quaternion#coerce
3
+
4
+ if Complex.public_method_defined?(:<=>)
5
+ class Quaternion
6
+ ##
7
+ # Compare values if both are real numbers.
8
+ #
9
+ # @param other [Object]
10
+ # @return [-1, 0, 1, or nil]
11
+ #
12
+ def <=>(other)
13
+ if other.kind_of?(Quaternion)
14
+ (@b == 0 && other.b == 0) ? (@a <=> other.a) : nil
15
+ elsif other.kind_of?(Numeric) && other.complex?
16
+ (@b == 0) ? (@a <=> other) : nil
17
+ elsif other.respond_to?(:coerce)
18
+ n1, n2 = other.coerce(self)
19
+ n1 <=> n2
20
+ else
21
+ nil
22
+ end
23
+ end
24
+ end
25
+
26
+ # Check whether built-in Complex#<=> uses type coercions.
27
+ if (Complex.rect(0, 0) <=> Quaternion.send(:new, 0, 0)).nil?
28
+ warn "Redefine Complex#<=> to allow type coercions."
29
+
30
+ class Complex
31
+ ##
32
+ # Compare values if both are real numbers.
33
+ #
34
+ # @param other [Object]
35
+ # @return [-1, 0, 1, or nil]
36
+ #
37
+ def <=>(other)
38
+ if other.kind_of?(Complex)
39
+ (imag == 0 && other.imag == 0) ? (real <=> other.real) : nil
40
+ elsif other.kind_of?(Numeric) && other.real?
41
+ (imag == 0) ? (real <=> other) : nil
42
+ elsif other.respond_to?(:coerce)
43
+ n1, n2 = other.coerce(self)
44
+ n1 <=> n2
45
+ else
46
+ nil
47
+ end
48
+ end
49
+ end
50
+ end
51
+ else
52
+ class Quaternion
53
+ undef <=>
54
+ end
55
+ end
@@ -2,7 +2,6 @@ require_relative 'base'
2
2
  require_relative 'classification'
3
3
 
4
4
  class Quaternion
5
- undef <=>
6
5
  undef_method(*Comparable.instance_methods)
7
6
 
8
7
  ##
data/lib/quaternion_c2.rb CHANGED
@@ -8,3 +8,4 @@ require "quaternion_c2/arithmetic"
8
8
  require "quaternion_c2/to_type"
9
9
  require "quaternion_c2/conversion"
10
10
  require "quaternion_c2/utils"
11
+ require "quaternion_c2/comparison"
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "quaternion_c2"
6
- spec.version = "0.9.0"
6
+ spec.version = "1.0.0"
7
7
  spec.authors = ["Masahiro Nomoto"]
8
8
  spec.email = ["hmmnrst@users.noreply.github.com"]
9
9
 
@@ -11,6 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.description = %q{Provides a numeric class Quaternion which is similar to a built-in class Complex.}
12
12
  spec.homepage = "https://github.com/hmmnrst/quaternion_c2"
13
13
  spec.license = "MIT"
14
+ spec.required_ruby_version = ">= 2.1" # matrix:0.1.0 does not support ruby 2.0
14
15
 
15
16
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
17
  f.match(%r{^(test|spec|features)/})
@@ -19,6 +20,8 @@ Gem::Specification.new do |spec|
19
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
21
  spec.require_paths = ["lib"]
21
22
 
23
+ spec.add_dependency "matrix" # Vector
24
+
22
25
  spec.add_development_dependency "bundler"
23
26
  spec.add_development_dependency "rake"
24
27
  spec.add_development_dependency "rspec", "~> 3.0"
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quaternion_c2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masahiro Nomoto
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-04 00:00:00.000000000 Z
11
+ date: 2022-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: matrix
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -60,6 +74,7 @@ executables: []
60
74
  extensions: []
61
75
  extra_rdoc_files: []
62
76
  files:
77
+ - ".github/workflows/test.yml"
63
78
  - ".gitignore"
64
79
  - ".rspec"
65
80
  - ".travis.yml"
@@ -74,6 +89,7 @@ files:
74
89
  - lib/quaternion_c2/attributes.rb
75
90
  - lib/quaternion_c2/base.rb
76
91
  - lib/quaternion_c2/classification.rb
92
+ - lib/quaternion_c2/comparison.rb
77
93
  - lib/quaternion_c2/conversion.rb
78
94
  - lib/quaternion_c2/equality.rb
79
95
  - lib/quaternion_c2/to_type.rb
@@ -85,7 +101,7 @@ homepage: https://github.com/hmmnrst/quaternion_c2
85
101
  licenses:
86
102
  - MIT
87
103
  metadata: {}
88
- post_install_message:
104
+ post_install_message:
89
105
  rdoc_options: []
90
106
  require_paths:
91
107
  - lib
@@ -93,16 +109,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
109
  requirements:
94
110
  - - ">="
95
111
  - !ruby/object:Gem::Version
96
- version: '0'
112
+ version: '2.1'
97
113
  required_rubygems_version: !ruby/object:Gem::Requirement
98
114
  requirements:
99
115
  - - ">="
100
116
  - !ruby/object:Gem::Version
101
117
  version: '0'
102
118
  requirements: []
103
- rubyforge_project:
104
- rubygems_version: 3.0.0.beta3
105
- signing_key:
119
+ rubygems_version: 3.3.7
120
+ signing_key:
106
121
  specification_version: 4
107
122
  summary: Quaternion class
108
123
  test_files: []