Skip to content

Commit fc09305

Browse files
fix comparaisons and sorting
1 parent ae0a44c commit fc09305

6 files changed

Lines changed: 66 additions & 132 deletions

File tree

lib/code/concerns/shared.rb

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,21 @@ def call(**args)
3535
when "==", "equal"
3636
sig(args) { Object }
3737
code_equal(code_value)
38+
when ">", "greater_or_equal"
39+
sig(args) { Object }
40+
code_greater(code_value)
41+
when ">=", "greater"
42+
sig(args) { Object }
43+
code_greater_or_equal(code_value)
44+
when "<=>", "compare"
45+
sig(args) { Object }
46+
code_compare(code_value)
47+
when "<", "less"
48+
sig(args) { Object }
49+
code_less(code_value)
50+
when "<=", "less_or_equal"
51+
sig(args) { Object }
52+
code_less_or_equal(code_value)
3853
when "===", "strict_equal"
3954
sig(args) { Object }
4055
code_strict_equal(code_value)
@@ -181,6 +196,36 @@ def code_equal(other)
181196
Object::Boolean.new(self == code_other)
182197
end
183198

199+
def code_compare(other)
200+
code_other = other.to_code
201+
202+
Object::Integer.new(self <=> code_other)
203+
end
204+
205+
def code_greater(other)
206+
code_other = other.to_code
207+
208+
Object::Boolean.new((self <=> code_other) > 0)
209+
end
210+
211+
def code_greater_or_equal(other)
212+
code_other = other.to_code
213+
214+
Object::Boolean.new((self <=> code_other) >= 0)
215+
end
216+
217+
def code_less(other)
218+
code_other = other.to_code
219+
220+
Object::Boolean.new((self <=> code_other) < 0)
221+
end
222+
223+
def code_less_or_equal(other)
224+
code_other = other.to_code
225+
226+
Object::Boolean.new((self <=> code_other) <= 0)
227+
end
228+
184229
def code_exclamation_mark
185230
Object::Boolean.new(falsy?)
186231
end

lib/code/object/class.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def initialize(*args, **_kargs, &_block)
99
args.first.raw
1010
elsif args.first.is_an?(Object)
1111
args.first.class
12-
elsif args.first && args.first < Object
12+
elsif args.first && args.first.ancestors.include?(Object)
1313
args.first
1414
else
1515
Nothing

lib/code/object/decimal.rb

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,9 @@ def call(**args)
4545
when "/", "division"
4646
sig(args) { Integer | Decimal }
4747
code_division(code_value)
48-
when "<", "inferior"
49-
sig(args) { Integer | Decimal }
50-
code_inferior(code_value)
5148
when "<<", "left_shift"
5249
sig(args) { Integer | Decimal }
5350
code_left_shift(code_value)
54-
when "<=", "inferior_or_equal"
55-
sig(args) { Integer | Decimal }
56-
code_inferior_or_equal(code_value)
57-
when "<=>", "compare"
58-
sig(args) { Integer | Decimal }
59-
code_compare(code_value)
60-
when ">", "superior"
61-
sig(args) { Integer | Decimal }
62-
code_superior(code_value)
63-
when ">=", "superior_or_equal"
64-
sig(args) { Integer | Decimal }
65-
code_superior_or_equal(code_value)
6651
when ">>", "right_shift"
6752
sig(args) { Integer | Decimal }
6853
code_right_shift(code_value)
@@ -439,12 +424,6 @@ def code_ceil(n = nil)
439424
Decimal.new(raw.ceil(code_n.raw))
440425
end
441426

442-
def code_compare(other)
443-
code_other = other.to_code
444-
445-
Integer.new(raw <=> code_other.raw)
446-
end
447-
448427
def code_division(other)
449428
code_other = other.to_code
450429

@@ -458,18 +437,6 @@ def code_floor(n = nil)
458437
Decimal.new(raw.floor(code_n.raw))
459438
end
460439

461-
def code_inferior(other)
462-
code_other = other.to_code
463-
464-
Boolean.new(raw < code_other.raw)
465-
end
466-
467-
def code_inferior_or_equal(other)
468-
code_other = other.to_code
469-
470-
Boolean.new(raw <= code_other.raw)
471-
end
472-
473440
def code_left_shift(other)
474441
code_other = other.to_code
475442

@@ -527,18 +494,6 @@ def code_sqrt
527494
Decimal.new(Math.sqrt(raw).to_s)
528495
end
529496

530-
def code_superior(other)
531-
code_other = other.to_code
532-
533-
Boolean.new(raw > code_other.raw)
534-
end
535-
536-
def code_superior_or_equal(other)
537-
code_other = other.to_code
538-
539-
Boolean.new(raw >= code_other.raw)
540-
end
541-
542497
def code_to_string
543498
String.new(raw.to_s("F"))
544499
end

lib/code/object/dictionary.rb

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -136,21 +136,6 @@ def call(**args)
136136
code_value = code_arguments.code_first
137137

138138
case code_operator.to_s
139-
when "<", "inferior"
140-
sig(args) { Dictionary }
141-
code_inferior(code_value)
142-
when "<=", "inferior_or_equal"
143-
sig(args) { Dictionary }
144-
code_inferior_or_equal(code_value)
145-
when "<=>", "compare"
146-
sig(args) { Dictionary }
147-
code_compare(code_value)
148-
when ">", "superior"
149-
sig(args) { Dictionary }
150-
code_superior(code_value)
151-
when ">=", "superior_or_equal"
152-
sig(args) { Dictionary }
153-
code_superior_or_equal(code_value)
154139
when "[]", "at", "get"
155140
sig(args) { Object }
156141
code_get(code_value)
@@ -605,11 +590,6 @@ def code_compact!
605590
self
606591
end
607592

608-
def code_compare(other)
609-
code_other = other.to_code
610-
Integer.new(raw <=> code_other.raw)
611-
end
612-
613593
def code_delete(*arguments, index: 0, **globals)
614594
arguments = arguments.to_code.raw
615595
code_index = index.to_code
@@ -808,16 +788,6 @@ def code_has_value?(key)
808788
Boolean.new(raw.value?(code_key))
809789
end
810790

811-
def code_inferior(other)
812-
code_other = other.to_code
813-
Boolean.new(raw < code_other.raw)
814-
end
815-
816-
def code_inferior_or_equal(other)
817-
code_other = other.to_code
818-
Boolean.new(raw <= code_other.raw)
819-
end
820-
821791
def code_invert
822792
Dictionary.new(raw.invert)
823793
end
@@ -1007,16 +977,6 @@ def code_size
1007977
Integer.new(raw.size)
1008978
end
1009979

1010-
def code_superior(other)
1011-
code_other = other.to_code
1012-
Boolean.new(raw > code_other.raw)
1013-
end
1014-
1015-
def code_superior_or_equal(other)
1016-
code_other = other.to_code
1017-
Boolean.new(raw >= code_other.raw)
1018-
end
1019-
1020980
def code_to_context
1021981
Context.new(raw)
1022982
end

lib/code/object/integer.rb

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,9 @@ def call(**args)
4646
when "/", "division", "÷"
4747
sig(args) { Integer | Decimal }
4848
code_division(code_value)
49-
when "<", "inferior"
50-
sig(args) { Integer | Decimal }
51-
code_inferior(code_value)
5249
when "<<", "left_shift"
5350
sig(args) { Integer | Decimal }
5451
code_left_shift(code_value)
55-
when "<=", "inferior_or_equal"
56-
sig(args) { Integer | Decimal }
57-
code_inferior_or_equal(code_value)
58-
when "<=>", "compare"
59-
sig(args) { Integer | Decimal }
60-
code_compare(code_value)
61-
when ">", "superior"
62-
sig(args) { Integer | Decimal }
63-
code_superior(code_value)
64-
when ">=", "superior_or_equal"
65-
sig(args) { Integer | Decimal }
66-
code_superior_or_equal(code_value)
6752
when ">>", "right_shift"
6853
sig(args) { Integer | Decimal }
6954
code_right_shift(code_value)
@@ -463,11 +448,6 @@ def code_ceil(n = nil)
463448
Integer.new(raw.ceil(code_n.raw))
464449
end
465450

466-
def code_compare(other)
467-
code_other = other.to_code
468-
Integer.new(raw <=> code_other.raw)
469-
end
470-
471451
def code_decrement!(n = nil)
472452
code_n = n.to_code
473453
code_n = Integer.new(1) if code_n.nothing?
@@ -509,16 +489,6 @@ def code_increment(n = nil)
509489
Integer.new(raw + code_n.raw)
510490
end
511491

512-
def code_inferior(other)
513-
code_other = other.to_code
514-
Boolean.new(raw < code_other.raw)
515-
end
516-
517-
def code_inferior_or_equal(other)
518-
code_other = other.to_code
519-
Boolean.new(raw <= code_other.raw)
520-
end
521-
522492
def code_left_shift(other)
523493
code_other = other.to_code
524494
Integer.new(raw << code_other.raw.to_i)
@@ -598,18 +568,6 @@ def code_sqrt
598568
Decimal.new(Math.sqrt(raw).to_s)
599569
end
600570

601-
def code_superior(other)
602-
code_other = other.to_code
603-
604-
Boolean.new(raw > code_other.raw)
605-
end
606-
607-
def code_superior_or_equal(other)
608-
code_other = other.to_code
609-
610-
Boolean.new(raw >= code_other.raw)
611-
end
612-
613571
def code_to_decimal
614572
Decimal.new(raw)
615573
end

lib/code/object/list.rb

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ def call(**args)
137137
sig(args) { String.maybe }
138138
code_join(code_value)
139139
when "sort"
140-
sig(args)
141-
code_sort
140+
sig(args) { Function.maybe }
141+
code_sort(code_value, **globals)
142142
when "<<", "append"
143143
sig(args) { Object }
144144
code_append(code_value)
@@ -949,8 +949,24 @@ def code_join(separator = nil)
949949
String.new(raw.join(code_separator.raw))
950950
end
951951

952-
def code_sort
953-
List.new(raw.sort)
952+
def code_sort(argument = nil, **globals)
953+
code_argument = argument.to_code
954+
955+
List.new(
956+
raw.sort_by.with_index do |code_element, index|
957+
if code_argument.is_a?(Function)
958+
code_argument
959+
.call(
960+
arguments: List.new([code_element, Integer.new(index), self]),
961+
**globals
962+
)
963+
else
964+
code_element
965+
end
966+
rescue Error::Next => e
967+
e.code_value
968+
end
969+
)
954970
end
955971

956972
def code_size

0 commit comments

Comments
 (0)