Skip to content

Commit a515c51

Browse files
committed
Add PyTypeObjectWrapper#<, #>, #<=, #>=
1 parent e37b72a commit a515c51

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

lib/pycall/pytypeobject_wrapper.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,26 @@ def <=>(other)
7878
nil
7979
end
8080

81+
def <(other)
82+
cmp = self <=> other
83+
cmp && cmp < 0
84+
end
85+
86+
def >(other)
87+
cmp = self <=> other
88+
cmp && cmp > 0
89+
end
90+
91+
def <=(other)
92+
cmp = self <=> other
93+
cmp && cmp <= 0
94+
end
95+
96+
def >=(other)
97+
cmp = self <=> other
98+
cmp && cmp >= 0
99+
end
100+
81101
private
82102

83103
def register_python_type_mapping

spec/pycall/pytypeobject_wrapper_spec.rb

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,58 @@ module PyCall
114114
end
115115
end
116116

117+
describe '#<' do
118+
specify do
119+
expect(PyCall.builtins.list < PyCall.builtins.list).to eq(false)
120+
expect(PyCall.builtins.list < PyCall.builtins.object).to eq(true)
121+
expect(PyCall.builtins.object < PyCall.builtins.list).to eq(false)
122+
expect(PyCall.builtins.list < PyCall.builtins.dict).to eq(nil)
123+
expect(PyCall.builtins.list < Object).to eq(true)
124+
expect(PyCall.builtins.list < Array).to eq(nil)
125+
expect(PyCall.builtins.list < Conversion.from_ruby(42)).to eq(nil)
126+
expect(PyCall.builtins.list < 42).to eq(nil)
127+
end
128+
end
129+
130+
describe '#>' do
131+
specify do
132+
expect(PyCall.builtins.list > PyCall.builtins.list).to eq(false)
133+
expect(PyCall.builtins.list > PyCall.builtins.object).to eq(false)
134+
expect(PyCall.builtins.object > PyCall.builtins.list).to eq(true)
135+
expect(PyCall.builtins.list > PyCall.builtins.dict).to eq(nil)
136+
expect(PyCall.builtins.list > Object).to eq(false)
137+
expect(PyCall.builtins.list > Array).to eq(nil)
138+
expect(PyCall.builtins.list > Conversion.from_ruby(42)).to eq(nil)
139+
expect(PyCall.builtins.list > 42).to eq(nil)
140+
end
141+
end
142+
143+
describe '#<=' do
144+
specify do
145+
expect(PyCall.builtins.list <= PyCall.builtins.list).to eq(true)
146+
expect(PyCall.builtins.list <= PyCall.builtins.object).to eq(true)
147+
expect(PyCall.builtins.object <= PyCall.builtins.list).to eq(false)
148+
expect(PyCall.builtins.list <= PyCall.builtins.dict).to eq(nil)
149+
expect(PyCall.builtins.list <= Object).to eq(true)
150+
expect(PyCall.builtins.list <= Array).to eq(nil)
151+
expect(PyCall.builtins.list <= Conversion.from_ruby(42)).to eq(nil)
152+
expect(PyCall.builtins.list <= 42).to eq(nil)
153+
end
154+
end
155+
156+
describe '#>=' do
157+
specify do
158+
expect(PyCall.builtins.list >= PyCall.builtins.list).to eq(true)
159+
expect(PyCall.builtins.list >= PyCall.builtins.object).to eq(false)
160+
expect(PyCall.builtins.object >= PyCall.builtins.list).to eq(true)
161+
expect(PyCall.builtins.list >= PyCall.builtins.dict).to eq(nil)
162+
expect(PyCall.builtins.list >= Object).to eq(false)
163+
expect(PyCall.builtins.list >= Array).to eq(nil)
164+
expect(PyCall.builtins.list >= Conversion.from_ruby(42)).to eq(nil)
165+
expect(PyCall.builtins.list >= 42).to eq(nil)
166+
end
167+
end
168+
117169
describe '#===' do
118170
specify do
119171
expect(PyCall.builtins.tuple === PyCall.tuple()).to eq(true)

0 commit comments

Comments
 (0)