extend comparison operators to collection types (iterating)

This commit is contained in:
John Kerl 2020-11-07 22:51:51 -05:00
parent deb32888f6
commit 0bb07a8f5e
6 changed files with 90 additions and 100 deletions

View file

@ -1,7 +1,7 @@
#!/bin/sh
# ================================================================
set -e
#####set -e
# For building with autoconf:
# * in-directory build:
@ -138,7 +138,7 @@ mlr_expect_fail() {
echo "Exit status was $status; expected 1."
echo "Exit status was $status; expected 1." >> $outfile
fi
set -e
#####set -e
echo >> $outfile
test $status -eq 1
# since set -e

View file

@ -142,3 +142,13 @@ func _i0__(ma, mb *Mlrval) Mlrval {
func _f0__(ma, mb *Mlrval) Mlrval {
return MlrvalFromFloat64(0.0)
}
// Return boolean true (binary)
func _true(ma, mb *Mlrval) Mlrval {
return MlrvalFromBool(true)
}
// Return boolean false (binary)
func _fals(ma, mb *Mlrval) Mlrval {
return MlrvalFromBool(false)
}

View file

@ -145,81 +145,81 @@ func le_b_ff(ma, mb *Mlrval) Mlrval {
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
var eq_dispositions = [MT_DIM][MT_DIM]BinaryFunc{
// ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _absn, _absn},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, eq_b_ss, eq_b_ss, eq_b_sx, eq_b_sx, _erro, _absn, _absn},
/*STRING */ {_erro, _absn, eq_b_ss, eq_b_ss, eq_b_sx, eq_b_sx, _erro, _absn, _absn},
/*INT */ {_erro, _absn, eq_b_xs, eq_b_xs, eq_b_ii, eq_b_if, _erro, _absn, _absn},
/*FLOAT */ {_erro, _absn, eq_b_xs, eq_b_xs, eq_b_fi, eq_b_ff, _erro, _absn, _absn},
/*BOOL */ {_erro, _erro, _absn, _erro, _erro, _erro, _erro, _absn, _absn},
/*ARRAY */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*MAP */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
// . ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, eq_b_ss, eq_b_ss, eq_b_sx, eq_b_sx, _fals, _fals, _fals},
/*STRING */ {_erro, _absn, eq_b_ss, eq_b_ss, eq_b_sx, eq_b_sx, _fals, _fals, _fals},
/*INT */ {_erro, _absn, eq_b_xs, eq_b_xs, eq_b_ii, eq_b_if, _fals, _fals, _fals},
/*FLOAT */ {_erro, _absn, eq_b_xs, eq_b_xs, eq_b_fi, eq_b_ff, _fals, _fals, _fals},
/*BOOL */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
/*ARRAY */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
/*MAP */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
}
var ne_dispositions = [MT_DIM][MT_DIM]BinaryFunc{
// ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _absn, _absn},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, ne_b_ss, ne_b_ss, ne_b_sx, ne_b_sx, _erro, _absn, _absn},
/*STRING */ {_erro, _absn, ne_b_ss, ne_b_ss, ne_b_sx, ne_b_sx, _erro, _absn, _absn},
/*INT */ {_erro, _absn, ne_b_xs, ne_b_xs, ne_b_ii, ne_b_if, _erro, _absn, _absn},
/*FLOAT */ {_erro, _absn, ne_b_xs, ne_b_xs, ne_b_fi, ne_b_ff, _erro, _absn, _absn},
/*BOOL */ {_erro, _erro, _absn, _erro, _erro, _erro, _erro, _absn, _absn},
/*ARRAY */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*MAP */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
// . ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, ne_b_ss, ne_b_ss, ne_b_sx, ne_b_sx, _true, _true, _true},
/*STRING */ {_erro, _absn, ne_b_ss, ne_b_ss, ne_b_sx, ne_b_sx, _true, _true, _true},
/*INT */ {_erro, _absn, ne_b_xs, ne_b_xs, ne_b_ii, ne_b_if, _true, _true, _true},
/*FLOAT */ {_erro, _absn, ne_b_xs, ne_b_xs, ne_b_fi, ne_b_ff, _true, _true, _true},
/*BOOL */ {_erro, _absn, _true, _true, _true, _true, _true, _true, _true},
/*ARRAY */ {_erro, _absn, _true, _true, _true, _true, _true, _true, _true},
/*MAP */ {_erro, _absn, _true, _true, _true, _true, _true, _true, _true},
}
var gt_dispositions = [MT_DIM][MT_DIM]BinaryFunc{
// ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _absn, _absn},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, gt_b_ss, gt_b_ss, gt_b_sx, gt_b_sx, _erro, _absn, _absn},
/*STRING */ {_erro, _absn, gt_b_ss, gt_b_ss, gt_b_sx, gt_b_sx, _erro, _absn, _absn},
/*INT */ {_erro, _absn, gt_b_xs, gt_b_xs, gt_b_ii, gt_b_if, _erro, _absn, _absn},
/*FLOAT */ {_erro, _absn, gt_b_xs, gt_b_xs, gt_b_fi, gt_b_ff, _erro, _absn, _absn},
/*BOOL */ {_erro, _erro, _absn, _erro, _erro, _erro, _erro, _absn, _absn},
/*ARRAY */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*MAP */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
// . ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, gt_b_ss, gt_b_ss, gt_b_sx, gt_b_sx, _fals, _fals, _fals},
/*STRING */ {_erro, _absn, gt_b_ss, gt_b_ss, gt_b_sx, gt_b_sx, _fals, _fals, _fals},
/*INT */ {_erro, _absn, gt_b_xs, gt_b_xs, gt_b_ii, gt_b_if, _fals, _fals, _fals},
/*FLOAT */ {_erro, _absn, gt_b_xs, gt_b_xs, gt_b_fi, gt_b_ff, _fals, _fals, _fals},
/*BOOL */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
/*ARRAY */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
/*MAP */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
}
var ge_dispositions = [MT_DIM][MT_DIM]BinaryFunc{
// ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _absn, _absn},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, ge_b_ss, ge_b_ss, ge_b_sx, ge_b_sx, _erro, _absn, _absn},
/*STRING */ {_erro, _absn, ge_b_ss, ge_b_ss, ge_b_sx, ge_b_sx, _erro, _absn, _absn},
/*INT */ {_erro, _absn, ge_b_xs, ge_b_xs, ge_b_ii, ge_b_if, _erro, _absn, _absn},
/*FLOAT */ {_erro, _absn, ge_b_xs, ge_b_xs, ge_b_fi, ge_b_ff, _erro, _absn, _absn},
/*BOOL */ {_erro, _erro, _absn, _erro, _erro, _erro, _erro, _absn, _absn},
/*ARRAY */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*MAP */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
// . ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, ge_b_ss, ge_b_ss, ge_b_sx, ge_b_sx, _fals, _fals, _fals},
/*STRING */ {_erro, _absn, ge_b_ss, ge_b_ss, ge_b_sx, ge_b_sx, _fals, _fals, _fals},
/*INT */ {_erro, _absn, ge_b_xs, ge_b_xs, ge_b_ii, ge_b_if, _fals, _fals, _fals},
/*FLOAT */ {_erro, _absn, ge_b_xs, ge_b_xs, ge_b_fi, ge_b_ff, _fals, _fals, _fals},
/*BOOL */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
/*ARRAY */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
/*MAP */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
}
var lt_dispositions = [MT_DIM][MT_DIM]BinaryFunc{
// ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _absn, _absn},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, lt_b_ss, lt_b_ss, lt_b_sx, lt_b_sx, _erro, _absn, _absn},
/*STRING */ {_erro, _absn, lt_b_ss, lt_b_ss, lt_b_sx, lt_b_sx, _erro, _absn, _absn},
/*INT */ {_erro, _absn, lt_b_xs, lt_b_xs, lt_b_ii, lt_b_if, _erro, _absn, _absn},
/*FLOAT */ {_erro, _absn, lt_b_xs, lt_b_xs, lt_b_fi, lt_b_ff, _erro, _absn, _absn},
/*BOOL */ {_erro, _erro, _absn, _erro, _erro, _erro, _erro, _absn, _absn},
/*ARRAY */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*MAP */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
// . ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, lt_b_ss, lt_b_ss, lt_b_sx, lt_b_sx, _fals, _fals, _fals},
/*STRING */ {_erro, _absn, lt_b_ss, lt_b_ss, lt_b_sx, lt_b_sx, _fals, _fals, _fals},
/*INT */ {_erro, _absn, lt_b_xs, lt_b_xs, lt_b_ii, lt_b_if, _fals, _fals, _fals},
/*FLOAT */ {_erro, _absn, lt_b_xs, lt_b_xs, lt_b_fi, lt_b_ff, _fals, _fals, _fals},
/*BOOL */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
/*ARRAY */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
/*MAP */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
}
var le_dispositions = [MT_DIM][MT_DIM]BinaryFunc{
// ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _absn, _absn},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, le_b_ss, le_b_ss, le_b_sx, le_b_sx, _erro, _absn, _absn},
/*STRING */ {_erro, _absn, le_b_ss, le_b_ss, le_b_sx, le_b_sx, _erro, _absn, _absn},
/*INT */ {_erro, _absn, le_b_xs, le_b_xs, le_b_ii, le_b_if, _erro, _absn, _absn},
/*FLOAT */ {_erro, _absn, le_b_xs, le_b_xs, le_b_fi, le_b_ff, _erro, _absn, _absn},
/*BOOL */ {_erro, _erro, _absn, _erro, _erro, _erro, _erro, _absn, _absn},
/*ARRAY */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*MAP */ {_absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
// . ERROR ABSENT VOID STRING INT FLOAT BOOL ARRAY MAP
/*ERROR */ {_erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro, _erro},
/*ABSENT */ {_erro, _absn, _absn, _absn, _absn, _absn, _absn, _absn, _absn},
/*VOID */ {_erro, _absn, le_b_ss, le_b_ss, le_b_sx, le_b_sx, _fals, _fals, _fals},
/*STRING */ {_erro, _absn, le_b_ss, le_b_ss, le_b_sx, le_b_sx, _fals, _fals, _fals},
/*INT */ {_erro, _absn, le_b_xs, le_b_xs, le_b_ii, le_b_if, _fals, _fals, _fals},
/*FLOAT */ {_erro, _absn, le_b_xs, le_b_xs, le_b_fi, le_b_ff, _fals, _fals, _fals},
/*BOOL */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
/*ARRAY */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
/*MAP */ {_erro, _absn, _fals, _fals, _fals, _fals, _fals, _fals, _fals},
}
func MlrvalEquals(ma, mb *Mlrval) Mlrval {

View file

@ -9,9 +9,12 @@ TOP OF LIST:
! come up with some kind of blank-line trigger for miller and a condition for it .....
o i want this pattern over and over
! csvlite
* UDF nexts:
! check for multiple put -f; any/multiple put -e
> non-flag copy from sort
* filter -x
! more functions
! function metadata, w/ sort-by, for online help
! double-check $-anything in begin/end
@ -41,6 +44,7 @@ TOP OF LIST:
* some more verbs
o easies first
o having-fields -x feature ... or something
o join, stats1, stats2
* double-check rand-seeding

View file

@ -261,10 +261,10 @@ echo; run_mlr --from u/s.dkvp put -q '@sum += $x; @count += 1; print'
echo; run_mlr --from u/s.dkvp put -q '@sum += $x; @count += 1; print @sum'
echo; run_mlr --from u/s.dkvp put -q '@sum += $x; @count += 1; print @sum, @count'
echo; run_mlr --from s put -q 'print'
echo; run_mlr --from s put -q 'print $x'
echo; run_mlr --from s put -q 'print $x,$y'
echo; run_mlr --from s put -q 'print $x,$y,$i'
echo; run_mlr --from u/s.dkvp put -q 'print'
echo; run_mlr --from u/s.dkvp put -q 'print $x'
echo; run_mlr --from u/s.dkvp put -q 'print $x,$y'
echo; run_mlr --from u/s.dkvp put -q 'print $x,$y,$i'
# ----------------------------------------------------------------
echo; run_mlr --from u/s.dkvp put -q '@sum += $x; dump'

View file

@ -2503,13 +2503,7 @@ mlr --from u/s.dkvp put -q @sum += $x; @count += 1; print @sum, @count
----------------------------------------------------------------
mlr --from s put -q print
mlr --from u/s.dkvp put -q print
@ -2517,45 +2511,27 @@ mlr --from s put -q print
----------------------------------------------------------------
mlr --from s put -q print $x
mlr --from u/s.dkvp put -q print $x
0.3467901443380824
-0.7586799647899636
0.7586799647899636
0.20460330576630303
-0.38139939387114097
0.5732889198020006
0.5271261600918548
0.6117840605678454
-0.5985540091064224
0.03144187646093577
0.5026260055412137
0.38139939387114097
----------------------------------------------------------------
mlr --from s put -q print $x,$y
mlr --from u/s.dkvp put -q print $x,$y
0.3467901443380824 0.7268028627434533
-0.7586799647899636 0.5221511083334797
0.7586799647899636 0.5221511083334797
0.20460330576630303 0.33831852551664776
-0.38139939387114097 0.13418874328430463
0.5732889198020006 0.8636244699032729
0.5271261600918548 0.49322128674835697
0.6117840605678454 0.1878849191181694
-0.5985540091064224 0.976181385699006
0.03144187646093577 0.7495507603507059
0.5026260055412137 0.9526183602969864
0.38139939387114097 0.13418874328430463
----------------------------------------------------------------
mlr --from s put -q print $x,$y,$i
mlr --from u/s.dkvp put -q print $x,$y,$i
0.3467901443380824 0.7268028627434533 1
-0.7586799647899636 0.5221511083334797 2
0.7586799647899636 0.5221511083334797 2
0.20460330576630303 0.33831852551664776 3
-0.38139939387114097 0.13418874328430463 4
0.5732889198020006 0.8636244699032729 5
0.5271261600918548 0.49322128674835697 6
0.6117840605678454 0.1878849191181694 7
-0.5985540091064224 0.976181385699006 8
0.03144187646093577 0.7495507603507059 9
0.5026260055412137 0.9526183602969864 10
0.38139939387114097 0.13418874328430463 4
----------------------------------------------------------------