@@ -307,38 +307,18 @@ pub fn seq_lt(
307307 zelf : & dyn SimpleSeq ,
308308 other : & dyn SimpleSeq ,
309309) -> Result < bool , PyObjectRef > {
310- if zelf. len ( ) == other. len ( ) {
311- for ( a, b) in Iterator :: zip ( zelf. iter ( ) , other. iter ( ) ) {
312- let lt = vm. _lt ( a. clone ( ) , b. clone ( ) ) ?;
313- let value = objbool:: boolval ( vm, lt) ?;
314- if !value {
315- return Ok ( false ) ;
316- }
317- }
318- Ok ( true )
319- } else {
320- // This case is more complicated because it can still return true if
321- // `zelf` is the head of `other` e.g. [1,2,3] < [1,2,3,4] should return true
322- let mut head = true ; // true if `zelf` is the head of `other`
323-
324- for ( a, b) in Iterator :: zip ( zelf. iter ( ) , other. iter ( ) ) {
325- let lt = vm. _lt ( a. clone ( ) , b. clone ( ) ) ?;
326- let eq = vm. _eq ( a. clone ( ) , b. clone ( ) ) ?;
327- let lt_value = objbool:: boolval ( vm, lt) ?;
328- let eq_value = objbool:: boolval ( vm, eq) ?;
329-
330- if !lt_value && !eq_value {
331- return Ok ( false ) ;
332- } else if !eq_value {
333- head = false ;
334- }
310+ for ( a, b) in Iterator :: zip ( zelf. iter ( ) , other. iter ( ) ) {
311+ if vm. bool_lt ( a. clone ( ) , b. clone ( ) ) ? {
312+ return Ok ( true ) ;
313+ } else if !vm. bool_eq ( a. clone ( ) , b. clone ( ) ) ? {
314+ return Ok ( false ) ;
335315 }
316+ }
336317
337- if head {
338- Ok ( zelf. len ( ) < other. len ( ) )
339- } else {
340- Ok ( true )
341- }
318+ if zelf. len ( ) == other. len ( ) {
319+ Ok ( false )
320+ } else {
321+ Ok ( zelf. len ( ) < other. len ( ) )
342322 }
343323}
344324
@@ -347,37 +327,18 @@ pub fn seq_gt(
347327 zelf : & dyn SimpleSeq ,
348328 other : & dyn SimpleSeq ,
349329) -> Result < bool , PyObjectRef > {
350- if zelf. len ( ) == other. len ( ) {
351- for ( a, b) in Iterator :: zip ( zelf. iter ( ) , other. iter ( ) ) {
352- let gt = vm. _gt ( a. clone ( ) , b. clone ( ) ) ?;
353- let value = objbool:: boolval ( vm, gt) ?;
354- if !value {
355- return Ok ( false ) ;
356- }
357- }
358- Ok ( true )
359- } else {
360- let mut head = true ; // true if `other` is the head of `zelf`
361- for ( a, b) in Iterator :: zip ( zelf. iter ( ) , other. iter ( ) ) {
362- // This case is more complicated because it can still return true if
363- // `other` is the head of `zelf` e.g. [1,2,3,4] > [1,2,3] should return true
364- let gt = vm. _gt ( a. clone ( ) , b. clone ( ) ) ?;
365- let eq = vm. _eq ( a. clone ( ) , b. clone ( ) ) ?;
366- let gt_value = objbool:: boolval ( vm, gt) ?;
367- let eq_value = objbool:: boolval ( vm, eq) ?;
368-
369- if !gt_value && !eq_value {
370- return Ok ( false ) ;
371- } else if !eq_value {
372- head = false ;
373- }
330+ for ( a, b) in Iterator :: zip ( zelf. iter ( ) , other. iter ( ) ) {
331+ if vm. bool_gt ( a. clone ( ) , b. clone ( ) ) ? {
332+ return Ok ( true ) ;
333+ } else if !vm. bool_eq ( a. clone ( ) , b. clone ( ) ) ? {
334+ return Ok ( false ) ;
374335 }
336+ }
375337
376- if head {
377- Ok ( zelf. len ( ) > other. len ( ) )
378- } else {
379- Ok ( true )
380- }
338+ if zelf. len ( ) == other. len ( ) {
339+ Ok ( false )
340+ } else {
341+ Ok ( zelf. len ( ) > other. len ( ) )
381342 }
382343}
383344
@@ -386,15 +347,39 @@ pub fn seq_ge(
386347 zelf : & dyn SimpleSeq ,
387348 other : & dyn SimpleSeq ,
388349) -> Result < bool , PyObjectRef > {
389- Ok ( seq_gt ( vm, zelf, other) ? || seq_equal ( vm, zelf, other) ?)
350+ for ( a, b) in Iterator :: zip ( zelf. iter ( ) , other. iter ( ) ) {
351+ if vm. bool_gt ( a. clone ( ) , b. clone ( ) ) ? {
352+ return Ok ( true ) ;
353+ } else if !vm. bool_eq ( a. clone ( ) , b. clone ( ) ) ? {
354+ return Ok ( false ) ;
355+ }
356+ }
357+
358+ if zelf. len ( ) == other. len ( ) {
359+ Ok ( true )
360+ } else {
361+ Ok ( zelf. len ( ) > other. len ( ) )
362+ }
390363}
391364
392365pub fn seq_le (
393366 vm : & VirtualMachine ,
394367 zelf : & dyn SimpleSeq ,
395368 other : & dyn SimpleSeq ,
396369) -> Result < bool , PyObjectRef > {
397- Ok ( seq_lt ( vm, zelf, other) ? || seq_equal ( vm, zelf, other) ?)
370+ for ( a, b) in Iterator :: zip ( zelf. iter ( ) , other. iter ( ) ) {
371+ if vm. bool_lt ( a. clone ( ) , b. clone ( ) ) ? {
372+ return Ok ( true ) ;
373+ } else if !vm. bool_eq ( a. clone ( ) , b. clone ( ) ) ? {
374+ return Ok ( false ) ;
375+ }
376+ }
377+
378+ if zelf. len ( ) == other. len ( ) {
379+ Ok ( true )
380+ } else {
381+ Ok ( zelf. len ( ) < other. len ( ) )
382+ }
398383}
399384
400385pub struct SeqMul < ' a > {
0 commit comments