mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-17 16:38:54 +00:00
int-math UTs
This commit is contained in:
parent
c25ec85a15
commit
68c9dfef7d
10 changed files with 3791 additions and 528 deletions
|
|
@ -179,6 +179,34 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_n_n_func(mv_unary_func_t* pfunc, lre
|
|||
return pevaluator;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
typedef struct _lrec_evaluator_i_i_state_t {
|
||||
mv_unary_func_t* pfunc;
|
||||
lrec_evaluator_t* parg1;
|
||||
} lrec_evaluator_i_i_state_t;
|
||||
|
||||
mv_t lrec_evaluator_i_i_func(lrec_t* prec, context_t* pctx, void* pvstate) {
|
||||
lrec_evaluator_i_i_state_t* pstate = pvstate;
|
||||
mv_t val1 = pstate->parg1->pevaluator_func(prec, pctx, pstate->parg1->pvstate);
|
||||
|
||||
mt_get_int_nullable(&val1);
|
||||
NULL_OR_ERROR_OUT(val1);
|
||||
|
||||
return pstate->pfunc(&val1);
|
||||
}
|
||||
|
||||
lrec_evaluator_t* lrec_evaluator_alloc_from_i_i_func(mv_unary_func_t* pfunc, lrec_evaluator_t* parg1) {
|
||||
lrec_evaluator_i_i_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_evaluator_i_i_state_t));
|
||||
pstate->pfunc = pfunc;
|
||||
pstate->parg1 = parg1;
|
||||
|
||||
lrec_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(lrec_evaluator_t));
|
||||
pevaluator->pvstate = pstate;
|
||||
pevaluator->pevaluator_func = lrec_evaluator_i_i_func;
|
||||
|
||||
return pevaluator;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
typedef struct _lrec_evaluator_f_ff_state_t {
|
||||
mv_binary_func_t* pfunc;
|
||||
|
|
@ -257,11 +285,11 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_n_nn_func(mv_binary_func_t* pfunc,
|
|||
mv_t lrec_evaluator_n_nn_nullable_func(lrec_t* prec, context_t* pctx, void* pvstate) {
|
||||
lrec_evaluator_f_ff_state_t* pstate = pvstate;
|
||||
mv_t val1 = pstate->parg1->pevaluator_func(prec, pctx, pstate->parg1->pvstate);
|
||||
mt_get_float_nullable(&val1);
|
||||
mt_get_number_nullable(&val1);
|
||||
ERROR_OUT(val1);
|
||||
|
||||
mv_t val2 = pstate->parg2->pevaluator_func(prec, pctx, pstate->parg2->pvstate);
|
||||
mt_get_float_nullable(&val2);
|
||||
mt_get_number_nullable(&val2);
|
||||
ERROR_OUT(val2);
|
||||
|
||||
return pstate->pfunc(&val1, &val2);
|
||||
|
|
@ -1305,7 +1333,7 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_unary_func_name(char* fnnm, lrec_eva
|
|||
if (streq(fnnm, "!")) { return lrec_evaluator_alloc_from_b_b_func(b_b_not_func, parg1);
|
||||
} else if (streq(fnnm, "+")) { return lrec_evaluator_alloc_from_n_n_func(n_n_upos_func, parg1);
|
||||
} else if (streq(fnnm, "-")) { return lrec_evaluator_alloc_from_n_n_func(n_n_uneg_func, parg1);
|
||||
} else if (streq(fnnm, "~")) { return lrec_evaluator_alloc_from_n_n_func(i_i_bitwise_not_func, parg1);
|
||||
} else if (streq(fnnm, "~")) { return lrec_evaluator_alloc_from_i_i_func(i_i_bitwise_not_func, parg1);
|
||||
} else if (streq(fnnm, "abs")) { return lrec_evaluator_alloc_from_n_n_func(n_n_abs_func, parg1);
|
||||
} else if (streq(fnnm, "acos")) { return lrec_evaluator_alloc_from_f_f_func(f_f_acos_func, parg1);
|
||||
} else if (streq(fnnm, "acosh")) { return lrec_evaluator_alloc_from_f_f_func(f_f_acosh_func, parg1);
|
||||
|
|
|
|||
|
|
@ -895,6 +895,7 @@ static mv_t divide_f_if(mv_t* pa, mv_t* pb) {
|
|||
static mv_t divide_i_ii(mv_t* pa, mv_t* pb) {
|
||||
double a = (double)pa->u.intv;
|
||||
double b = (double)pb->u.intv;
|
||||
// Pythonic division, not C division.
|
||||
mv_t rv = {.type = MT_FLOAT, .u.fltv = a / b};
|
||||
return rv;
|
||||
}
|
||||
|
|
@ -934,9 +935,23 @@ static mv_t int_divide_f_if(mv_t* pa, mv_t* pb) {
|
|||
return rv;
|
||||
}
|
||||
static mv_t int_divide_i_ii(mv_t* pa, mv_t* pb) {
|
||||
double a = (double)pa->u.intv;
|
||||
double b = (double)pb->u.intv;
|
||||
mv_t rv = {.type = MT_FLOAT, .u.fltv = floor(a / b)};
|
||||
long long a = pa->u.intv;
|
||||
long long b = pb->u.intv;
|
||||
// Pythonic division, not C division.
|
||||
long long q = a / b;
|
||||
long long r = a % b;
|
||||
if (a < 0) {
|
||||
if (b > 0) {
|
||||
if (r != 0)
|
||||
q--;
|
||||
}
|
||||
} else {
|
||||
if (b < 0) {
|
||||
if (r != 0)
|
||||
q--;
|
||||
}
|
||||
}
|
||||
mv_t rv = {.type = MT_INT, .u.intv = q};
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
@ -961,25 +976,26 @@ static mv_t mod_e_xx(mv_t* pa, mv_t* pb) {
|
|||
static mv_t mod_f_ff(mv_t* pa, mv_t* pb) {
|
||||
double a = pa->u.fltv;
|
||||
double b = pb->u.fltv;
|
||||
mv_t rv = {.type = MT_FLOAT, .u.fltv = floor(a / b)};
|
||||
mv_t rv = {.type = MT_FLOAT, .u.fltv = a - b * floor(a / b)};
|
||||
return rv;
|
||||
}
|
||||
static mv_t mod_f_fi(mv_t* pa, mv_t* pb) {
|
||||
double a = pa->u.fltv;
|
||||
double b = (double)pb->u.intv;
|
||||
mv_t rv = {.type = MT_FLOAT, .u.fltv = floor(a / b)};
|
||||
mv_t rv = {.type = MT_FLOAT, .u.fltv = a - b * floor(a / b)};
|
||||
return rv;
|
||||
}
|
||||
static mv_t mod_f_if(mv_t* pa, mv_t* pb) {
|
||||
double a = (double)pa->u.intv;
|
||||
double b = pb->u.fltv;
|
||||
mv_t rv = {.type = MT_FLOAT, .u.fltv = floor(a / b)};
|
||||
mv_t rv = {.type = MT_FLOAT, .u.fltv = a - b * floor(a / b)};
|
||||
return rv;
|
||||
}
|
||||
static mv_t mod_i_ii(mv_t* pa, mv_t* pb) {
|
||||
long long a = pa->u.intv;
|
||||
long long b = pb->u.intv;
|
||||
long long u = a % b;
|
||||
// Pythonic division, not C division.
|
||||
if (a >= 0LL) {
|
||||
if (b < 0LL) {
|
||||
u += b;
|
||||
|
|
@ -989,7 +1005,7 @@ static mv_t mod_i_ii(mv_t* pa, mv_t* pb) {
|
|||
u += b;
|
||||
}
|
||||
}
|
||||
mv_t rv = {.type = MT_FLOAT, .u.fltv = u};
|
||||
mv_t rv = {.type = MT_INT, .u.intv = u};
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -36,6 +36,7 @@ EXTRA_DIST= \
|
|||
logi.dkvp \
|
||||
minmax.dkvp \
|
||||
missings.dkvp \
|
||||
mixed-types.xtab \
|
||||
modarith.dat \
|
||||
multi-ips.dkvp \
|
||||
multi-sep.csv \
|
||||
|
|
|
|||
10
c/reg_test/input/mixed-types.xtab
Normal file
10
c/reg_test/input/mixed-types.xtab
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
pf1 71.2
|
||||
nf1 -71.2
|
||||
zf 0.0
|
||||
pf2 73.4
|
||||
nf2 -73.4
|
||||
pi1 75
|
||||
ni1 -75
|
||||
zi 0
|
||||
pi2 76
|
||||
ni2 -76
|
||||
464
c/reg_test/run
464
c/reg_test/run
|
|
@ -321,7 +321,267 @@ run_mlr --odkvp step -a rsum,delta,counter -f x,y -g a $indir/abixy-het
|
|||
run_mlr --opprint histogram -f x,y --lo 0 --hi 1 --nbins 20 $indir/small
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
announce DSLs
|
||||
announce DSL OPERATOR ASSOCIATIVITY
|
||||
# Note: filter -v and put -v print the AST.
|
||||
|
||||
run_mlr put -v '$x = 1 || 2 || 3' /dev/null
|
||||
run_mlr filter -v ' 1 || 2 || 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ^^ 2 ^^ 3' /dev/null
|
||||
run_mlr filter -v ' 1 ^^ 2 ^^ 3' /dev/null
|
||||
run_mlr put -v '$x = 1 && 2 && 3' /dev/null
|
||||
run_mlr filter -v ' 1 && 2 && 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 == 2 == 3' /dev/null
|
||||
run_mlr filter -v ' 1 == 2 == 3' /dev/null
|
||||
run_mlr put -v '$x = 1 != 2 != 3' /dev/null
|
||||
run_mlr filter -v ' 1 != 2 != 3' /dev/null
|
||||
run_mlr put -v '$x = 1 =~ 2 =~ 3' /dev/null
|
||||
run_mlr filter -v ' 1 =~ 2 =~ 3' /dev/null
|
||||
run_mlr put -v '$x = 1 !=~ 2 !=~ 3' /dev/null
|
||||
run_mlr filter -v ' 1 !=~ 2 !=~ 3' /dev/null
|
||||
run_mlr put -v '$x = 1 == 2 != 3' /dev/null
|
||||
run_mlr filter -v ' 1 == 2 != 3' /dev/null
|
||||
run_mlr put -v '$x = 1 != 2 == 3' /dev/null
|
||||
run_mlr filter -v ' 1 != 2 == 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 < 2 < 3' /dev/null
|
||||
run_mlr filter -v ' 1 < 2 < 3' /dev/null
|
||||
run_mlr put -v '$x = 1 <= 2 <= 3' /dev/null
|
||||
run_mlr filter -v ' 1 <= 2 <= 3' /dev/null
|
||||
run_mlr put -v '$x = 1 > 2 > 3' /dev/null
|
||||
run_mlr filter -v ' 1 > 2 > 3' /dev/null
|
||||
run_mlr put -v '$x = 1 >= 2 >= 3' /dev/null
|
||||
run_mlr filter -v ' 1 >= 2 >= 3' /dev/null
|
||||
run_mlr put -v '$x = 1 < 2 <= 3' /dev/null
|
||||
run_mlr filter -v ' 1 < 2 <= 3' /dev/null
|
||||
run_mlr put -v '$x = 1 <= 2 < 3' /dev/null
|
||||
run_mlr filter -v ' 1 <= 2 < 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 | 2 | 3' /dev/null
|
||||
run_mlr filter -v ' 1 | 2 | 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ^ 2 ^ 3' /dev/null
|
||||
run_mlr filter -v ' 1 ^ 2 ^ 3' /dev/null
|
||||
run_mlr put -v '$x = 1 & 2 & 3' /dev/null
|
||||
run_mlr filter -v ' 1 & 2 & 3' /dev/null
|
||||
run_mlr put -v '$x = 1 | 2 & 3' /dev/null
|
||||
run_mlr filter -v ' 1 | 2 & 3' /dev/null
|
||||
run_mlr put -v '$x = 1 | 2 ^ 3' /dev/null
|
||||
run_mlr filter -v ' 1 | 2 ^ 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ^ 2 | 3' /dev/null
|
||||
run_mlr filter -v ' 1 ^ 2 | 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ^ 2 & 3' /dev/null
|
||||
run_mlr filter -v ' 1 ^ 2 & 3' /dev/null
|
||||
run_mlr put -v '$x = 1 & 2 | 3' /dev/null
|
||||
run_mlr filter -v ' 1 & 2 | 3' /dev/null
|
||||
run_mlr put -v '$x = 1 & 2 ^ 3' /dev/null
|
||||
run_mlr filter -v ' 1 & 2 ^ 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 << 2 << 3' /dev/null
|
||||
run_mlr filter -v ' 1 << 2 << 3' /dev/null
|
||||
run_mlr put -v '$x = 1 >> 2 >> 3' /dev/null
|
||||
run_mlr filter -v ' 1 >> 2 >> 3' /dev/null
|
||||
run_mlr put -v '$x = 1 << 2 >> 3' /dev/null
|
||||
run_mlr filter -v ' 1 << 2 >> 3' /dev/null
|
||||
run_mlr put -v '$x = 1 >> 2 << 3' /dev/null
|
||||
run_mlr filter -v ' 1 >> 2 << 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 + 2 + 3' /dev/null
|
||||
run_mlr filter -v ' 1 + 2 + 3' /dev/null
|
||||
run_mlr put -v '$x = 1 - 2 - 3' /dev/null
|
||||
run_mlr filter -v ' 1 - 2 - 3' /dev/null
|
||||
run_mlr put -v '$x = 1 + 2 - 3' /dev/null
|
||||
run_mlr filter -v ' 1 + 2 - 3' /dev/null
|
||||
run_mlr put -v '$x = 1 - 2 + 3' /dev/null
|
||||
run_mlr filter -v ' 1 - 2 + 3' /dev/null
|
||||
run_mlr put -v '$x = 1 . 2 . 3' /dev/null
|
||||
run_mlr filter -v ' 1 . 2 . 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 * 2 * 3' /dev/null
|
||||
run_mlr filter -v ' 1 * 2 * 3' /dev/null
|
||||
run_mlr put -v '$x = 1 / 2 / 3' /dev/null
|
||||
run_mlr filter -v ' 1 / 2 / 3' /dev/null
|
||||
run_mlr put -v '$x = 1 // 2 // 3' /dev/null
|
||||
run_mlr filter -v ' 1 // 2 // 3' /dev/null
|
||||
run_mlr put -v '$x = 1 % 2 % 3' /dev/null
|
||||
run_mlr filter -v ' 1 % 2 % 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ** 2 ** 3' /dev/null
|
||||
run_mlr filter -v ' 1 ** 2 ** 3' /dev/null
|
||||
|
||||
|
||||
run_mlr put -v '$x = 1 * 2 / 3' /dev/null
|
||||
run_mlr filter -v ' 1 * 2 / 3' /dev/null
|
||||
run_mlr put -v '$x = 1 * 2 // 3' /dev/null
|
||||
run_mlr filter -v ' 1 * 2 // 3' /dev/null
|
||||
run_mlr put -v '$x = 1 * 2 % 3' /dev/null
|
||||
run_mlr filter -v ' 1 * 2 % 3' /dev/null
|
||||
run_mlr put -v '$x = 1 * 2 ** 3' /dev/null
|
||||
run_mlr filter -v ' 1 * 2 ** 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 / 2 * 3' /dev/null
|
||||
run_mlr filter -v ' 1 / 2 * 3' /dev/null
|
||||
run_mlr put -v '$x = 1 / 2 // 3' /dev/null
|
||||
run_mlr filter -v ' 1 / 2 // 3' /dev/null
|
||||
run_mlr put -v '$x = 1 / 2 % 3' /dev/null
|
||||
run_mlr filter -v ' 1 / 2 % 3' /dev/null
|
||||
run_mlr put -v '$x = 1 / 2 ** 3' /dev/null
|
||||
run_mlr filter -v ' 1 / 2 ** 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 // 2 * 3' /dev/null
|
||||
run_mlr filter -v ' 1 // 2 * 3' /dev/null
|
||||
run_mlr put -v '$x = 1 // 2 / 3' /dev/null
|
||||
run_mlr filter -v ' 1 // 2 / 3' /dev/null
|
||||
run_mlr put -v '$x = 1 // 2 % 3' /dev/null
|
||||
run_mlr filter -v ' 1 // 2 % 3' /dev/null
|
||||
run_mlr put -v '$x = 1 // 2 ** 3' /dev/null
|
||||
run_mlr filter -v ' 1 // 2 ** 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 % 2 * 3' /dev/null
|
||||
run_mlr filter -v ' 1 % 2 * 3' /dev/null
|
||||
run_mlr put -v '$x = 1 % 2 / 3' /dev/null
|
||||
run_mlr filter -v ' 1 % 2 / 3' /dev/null
|
||||
run_mlr put -v '$x = 1 % 2 // 3' /dev/null
|
||||
run_mlr filter -v ' 1 % 2 // 3' /dev/null
|
||||
run_mlr put -v '$x = 1 % 2 ** 3' /dev/null
|
||||
run_mlr filter -v ' 1 % 2 ** 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 ** 2 * 3' /dev/null
|
||||
run_mlr filter -v ' 1 ** 2 * 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ** 2 / 3' /dev/null
|
||||
run_mlr filter -v ' 1 ** 2 / 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ** 2 // 3' /dev/null
|
||||
run_mlr filter -v ' 1 ** 2 // 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ** 2 % 3' /dev/null
|
||||
run_mlr filter -v ' 1 ** 2 % 3' /dev/null
|
||||
|
||||
#run_mlr put -v '$x = ++1' /dev/null
|
||||
#run_mlr filter -v ' ++1' /dev/null
|
||||
#run_mlr put -v '$x = --1' /dev/null
|
||||
#run_mlr filter -v ' --1' /dev/null
|
||||
#run_mlr put -v '$x = !!1' /dev/null
|
||||
#run_mlr filter -v ' !!1' /dev/null
|
||||
#run_mlr put -v '$x = ~;1' /dev/null
|
||||
#run_mlr filter -v ' ~~1' /dev/null
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
announce DSL OPERATOR PRECEDENCE
|
||||
# Note: filter -v and put -v print the AST.
|
||||
|
||||
run_mlr put -v '$x = 1 || 2 ^^ 3' /dev/null
|
||||
run_mlr filter -v ' 1 || 2 ^^ 3' /dev/null
|
||||
run_mlr put -v '$x = 1 || 2 && 3' /dev/null
|
||||
run_mlr filter -v ' 1 || 2 && 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 ^^ 2 || 3' /dev/null
|
||||
run_mlr filter -v ' 1 ^^ 2 || 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ^^ 2 && 3' /dev/null
|
||||
run_mlr filter -v ' 1 ^^ 2 && 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 && 2 || 3' /dev/null
|
||||
run_mlr filter -v ' 1 && 2 || 3' /dev/null
|
||||
run_mlr put -v '$x = 1 && 2 ^^ 3' /dev/null
|
||||
run_mlr filter -v ' 1 && 2 ^^ 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 == 2 <= 3' /dev/null
|
||||
run_mlr filter -v ' 1 == 2 <= 3' /dev/null
|
||||
run_mlr put -v '$x = 1 <= 2 == 3' /dev/null
|
||||
run_mlr filter -v ' 1 <= 2 == 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 <= 2 | 3' /dev/null
|
||||
run_mlr filter -v ' 1 <= 2 | 3' /dev/null
|
||||
run_mlr put -v '$x = 1 | 2 <= 3' /dev/null
|
||||
run_mlr filter -v ' 1 | 2 <= 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 | 2 ^ 3' /dev/null
|
||||
run_mlr filter -v ' 1 | 2 ^ 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ^ 2 | 3' /dev/null
|
||||
run_mlr filter -v ' 1 ^ 2 | 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 ^ 2 & 3' /dev/null
|
||||
run_mlr filter -v ' 1 ^ 2 & 3' /dev/null
|
||||
run_mlr put -v '$x = 1 & 2 ^ 3' /dev/null
|
||||
run_mlr filter -v ' 1 & 2 ^ 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 & 2 << 3' /dev/null
|
||||
run_mlr filter -v ' 1 & 2 << 3' /dev/null
|
||||
run_mlr put -v '$x = 1 << 2 & 3' /dev/null
|
||||
run_mlr filter -v ' 1 << 2 & 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 + 2 * 3' /dev/null
|
||||
run_mlr filter -v ' 1 + 2 * 3' /dev/null
|
||||
run_mlr put -v '$x = 1 * 2 + 3' /dev/null
|
||||
run_mlr filter -v ' 1 * 2 + 3' /dev/null
|
||||
run_mlr put -v '$x = 1 + (2 * 3)' /dev/null
|
||||
run_mlr filter -v ' 1 + (2 * 3)' /dev/null
|
||||
run_mlr put -v '$x = 1 * (2 + 3)' /dev/null
|
||||
run_mlr filter -v ' 1 * (2 + 3)' /dev/null
|
||||
run_mlr put -v '$x = (1 + 2) * 3' /dev/null
|
||||
run_mlr filter -v ' (1 + 2) * 3' /dev/null
|
||||
run_mlr put -v '$x = (1 * 2) + 3' /dev/null
|
||||
run_mlr filter -v ' (1 * 2) + 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 + 2 ** 3' /dev/null
|
||||
run_mlr filter -v ' 1 + 2 ** 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ** 2 + 3' /dev/null
|
||||
run_mlr filter -v ' 1 ** 2 + 3' /dev/null
|
||||
run_mlr put -v '$x = 1 + (2 ** 3)' /dev/null
|
||||
run_mlr filter -v ' 1 + (2 ** 3)' /dev/null
|
||||
run_mlr put -v '$x = 1 ** (2 + 3)' /dev/null
|
||||
run_mlr filter -v ' 1 ** (2 + 3)' /dev/null
|
||||
run_mlr put -v '$x = (1 + 2) ** 3' /dev/null
|
||||
run_mlr filter -v ' (1 + 2) ** 3' /dev/null
|
||||
run_mlr put -v '$x = (1 ** 2) + 3' /dev/null
|
||||
run_mlr filter -v ' (1 ** 2) + 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = 1 * 2 ** 3' /dev/null
|
||||
run_mlr filter -v ' 1 * 2 ** 3' /dev/null
|
||||
run_mlr put -v '$x = 1 ** 2 * 3' /dev/null
|
||||
run_mlr filter -v ' 1 ** 2 * 3' /dev/null
|
||||
run_mlr put -v '$x = 1 * (2 ** 3)' /dev/null
|
||||
run_mlr filter -v ' 1 * (2 ** 3)' /dev/null
|
||||
run_mlr put -v '$x = 1 ** (2 * 3)' /dev/null
|
||||
run_mlr filter -v ' 1 ** (2 * 3)' /dev/null
|
||||
run_mlr put -v '$x = (1 * 2) ** 3' /dev/null
|
||||
run_mlr filter -v ' (1 * 2) ** 3' /dev/null
|
||||
run_mlr put -v '$x = (1 ** 2) * 3' /dev/null
|
||||
run_mlr filter -v ' (1 ** 2) * 3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = -1 + 2 * 3' /dev/null
|
||||
run_mlr filter -v ' -1 + 2 * 3' /dev/null
|
||||
run_mlr put -v '$x = -1 * 2 + 3' /dev/null
|
||||
run_mlr filter -v ' -1 * 2 + 3' /dev/null
|
||||
run_mlr put -v '$x = 1 + -2 * 3' /dev/null
|
||||
run_mlr filter -v ' 1 + -2 * 3' /dev/null
|
||||
run_mlr put -v '$x = 1 * -2 + 3' /dev/null
|
||||
run_mlr filter -v ' 1 * -2 + 3' /dev/null
|
||||
run_mlr put -v '$x = 1 + 2 * -3' /dev/null
|
||||
run_mlr filter -v ' 1 + 2 * -3' /dev/null
|
||||
run_mlr put -v '$x = 1 * 2 + -3' /dev/null
|
||||
run_mlr filter -v ' 1 * 2 + -3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = ~1 | 2 & 3' /dev/null
|
||||
run_mlr filter -v ' ~1 | 2 & 3' /dev/null
|
||||
run_mlr put -v '$x = ~1 & 2 | 3' /dev/null
|
||||
run_mlr filter -v ' ~1 & 2 | 3' /dev/null
|
||||
run_mlr put -v '$x = 1 | ~2 & 3' /dev/null
|
||||
run_mlr filter -v ' 1 | ~2 & 3' /dev/null
|
||||
run_mlr put -v '$x = 1 & ~2 | 3' /dev/null
|
||||
run_mlr filter -v ' 1 & ~2 | 3' /dev/null
|
||||
run_mlr put -v '$x = 1 | 2 & ~3' /dev/null
|
||||
run_mlr filter -v ' 1 | 2 & ~3' /dev/null
|
||||
run_mlr put -v '$x = 1 & 2 | ~3' /dev/null
|
||||
run_mlr filter -v ' 1 & 2 | ~3' /dev/null
|
||||
|
||||
run_mlr put -v '$x = $a==1 && $b == 1 && $c == 1' /dev/null
|
||||
run_mlr filter -v ' $a==1 && $b == 1 && $c == 1' /dev/null
|
||||
run_mlr put -v '$x = $a==1 || $b == 1 && $c == 1' /dev/null
|
||||
run_mlr filter -v ' $a==1 || $b == 1 && $c == 1' /dev/null
|
||||
run_mlr put -v '$x = $a==1 || $b == 1 || $c == 1' /dev/null
|
||||
run_mlr filter -v ' $a==1 || $b == 1 || $c == 1' /dev/null
|
||||
run_mlr put -v '$x = $a==1 && $b == 1 || $c == 1' /dev/null
|
||||
run_mlr filter -v ' $a==1 && $b == 1 || $c == 1' /dev/null
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
announce DSL FUNCTIONAL TESTS
|
||||
|
||||
run_mlr filter '$x>.3' $indir/abixy
|
||||
run_mlr filter '$x>0.3' $indir/abixy
|
||||
|
|
@ -343,70 +603,149 @@ run_mlr put '$c = $a . $b' $indir/abixy
|
|||
|
||||
run_mlr --opprint put '$nr=NR;$fnr=FNR;$nf=NF;$filenum=FILENUM' $indir/abixy $indir/abixy
|
||||
|
||||
announce OPERATOR PRECEDENCE AND ASSOCIATIVITY
|
||||
|
||||
# Note: filter -v and put -v print the AST. Here we're checking associativity
|
||||
# and precedence.
|
||||
run_mlr put -v '$x=$a+$b+$c' /dev/null
|
||||
run_mlr put -v '$x=$a+$b-$c' /dev/null
|
||||
run_mlr put -v '$x=$a-$b-$c' /dev/null
|
||||
run_mlr put -v '$x=$a-$b+$c' /dev/null
|
||||
|
||||
run_mlr put -v '$x=$a*$b*$c' /dev/null
|
||||
run_mlr put -v '$x=$a*$b/$c' /dev/null
|
||||
run_mlr put -v '$x=$a/$b/$c' /dev/null
|
||||
run_mlr put -v '$x=$a/$b*$c' /dev/null
|
||||
|
||||
run_mlr put -v '$x=$a+$b+$c' /dev/null
|
||||
run_mlr put -v '$x=$a+$b*$c' /dev/null
|
||||
run_mlr put -v '$x=$a*$b*$c' /dev/null
|
||||
run_mlr put -v '$x=$a*$b+$c' /dev/null
|
||||
|
||||
run_mlr put -v '$x=$a+$b+$c' /dev/null
|
||||
run_mlr put -v '$x=$a+$b**$c' /dev/null
|
||||
run_mlr put -v '$x=$a**$b**$c' /dev/null
|
||||
run_mlr put -v '$x=$a**$b+$c' /dev/null
|
||||
|
||||
run_mlr put -v '$x=$a.$b.$c' /dev/null
|
||||
|
||||
run_mlr put -v '$x=-$a+$b*$c' /dev/null
|
||||
run_mlr put -v '$x=-$a*$b+$c' /dev/null
|
||||
run_mlr put -v '$x=$a+-$b*$c' /dev/null
|
||||
run_mlr put -v '$x=$a*-$b+$c' /dev/null
|
||||
run_mlr put -v '$x=$a+$b*-$c' /dev/null
|
||||
run_mlr put -v '$x=$a*$b+-$c' /dev/null
|
||||
|
||||
run_mlr --opprint put '$y=madd($x,10,37)' then put '$z=msub($x,10,37)' $indir/modarith.dat
|
||||
run_mlr --opprint put '$y=mexp($x,35,37)' then put '$z=mmul($x,$y,37)' $indir/modarith.dat
|
||||
|
||||
run_mlr filter -v '$a==1 && $b == 1 && $c == 1' /dev/null
|
||||
run_mlr filter -v '$a==1 || $b == 1 && $c == 1' /dev/null
|
||||
run_mlr filter -v '$a==1 || $b == 1 || $c == 1' /dev/null
|
||||
run_mlr filter -v '$a==1 && $b == 1 || $c == 1' /dev/null
|
||||
run_mlr put '$z=min($x, $y)' $indir/minmax.dkvp
|
||||
run_mlr put '$z=max($x, $y)' $indir/minmax.dkvp
|
||||
|
||||
run_mlr filter -v '$x<$a*$b*$c' /dev/null
|
||||
run_mlr filter -v '$x<$a*$b/$c' /dev/null
|
||||
run_mlr filter -v '$x<$a/$b/$c' /dev/null
|
||||
run_mlr filter -v '$x<$a/$b*$c' /dev/null
|
||||
# ----------------------------------------------------------------
|
||||
announce DSL TYPE-INFERENCE
|
||||
|
||||
run_mlr filter -v '$x<$a+$b+$c' /dev/null
|
||||
run_mlr filter -v '$x<$a+$b*$c' /dev/null
|
||||
run_mlr filter -v '$x<$a*$b*$c' /dev/null
|
||||
run_mlr filter -v '$x<$a*$b+$c' /dev/null
|
||||
run_mlr --xtab put '$y=abs($pf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=abs($nf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=abs($zf)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=abs($pi1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=abs($ni1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=abs($zi)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr filter -v '$x<$a+$b+$c' /dev/null
|
||||
run_mlr filter -v '$x<$a+$b**$c' /dev/null
|
||||
run_mlr filter -v '$x<$a**$b**$c' /dev/null
|
||||
run_mlr filter -v '$x<$a**$b+$c' /dev/null
|
||||
run_mlr --xtab put -f '$y=abs($pf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=abs($nf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=abs($zf)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=abs($pi1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=abs($ni1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=abs($zi)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr filter -v '$x<$a.$b.$c' /dev/null
|
||||
run_mlr --xtab put '$y=ceil($pf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=ceil($nf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=ceil($zf)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=ceil($pi1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=ceil($ni1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=ceil($zi)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr filter -v '$x<-$a+$b*$c' /dev/null
|
||||
run_mlr filter -v '$x<-$a*$b+$c' /dev/null
|
||||
run_mlr filter -v '$x<$a+-$b*$c' /dev/null
|
||||
run_mlr filter -v '$x<$a*-$b+$c' /dev/null
|
||||
run_mlr filter -v '$x<$a+$b*-$c' /dev/null
|
||||
run_mlr filter -v '$x<$a*$b+-$c' /dev/null
|
||||
run_mlr --xtab put -f '$y=floor($pf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=floor($nf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=floor($zf)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=floor($pi1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=floor($ni1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=floor($zi)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put '$y=round($pf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=round($nf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=round($zf)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=round($pi1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=round($ni1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=round($zi)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put -f '$y=round($pf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=round($nf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=round($zf)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=round($pi1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=round($ni1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=round($zi)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put '$y=sgn($pf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=sgn($nf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=sgn($zf)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=sgn($pi1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=sgn($ni1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$y=sgn($zi)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put -f '$y=sgn($pf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=sgn($nf1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=sgn($zf)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=sgn($pi1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=sgn($ni1)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$y=sgn($zi)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put -f '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put -f '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put '$sum=$pf1+$pf2;$diff=$pf1-$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$sum=$pf1+$pi2;$diff=$pf1-$pi2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$sum=$pi1+$pf2;$diff=$pi1-$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$sum=$pi1+$pi2;$diff=$pi1-$pi2' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put -f '$sum=$pf1+$pf2;$diff=$pf1-$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$sum=$pf1+$pi2;$diff=$pf1-$pi2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$sum=$pi1+$pf2;$diff=$pi1-$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$sum=$pi1+$pi2;$diff=$pi1-$pi2' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put '$prod=$pf1*$pf2;$quot=$pf1/$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$prod=$pf1*$pi2;$quot=$pf1/$pi2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$prod=$pi1*$pf2;$quot=$pi1/$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$prod=$pi1*$pi2;$quot=$pi1/$pi2' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put -f '$prod=$pf1*$pf2;$quot=$pf1/$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$prod=$pf1*$pi2;$quot=$pf1/$pi2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$prod=$pi1*$pf2;$quot=$pi1/$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$prod=$pi1*$pi2;$quot=$pi1/$pi2' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put '$iquot=$pf1//$pf2;$mod=$pf1%$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$iquot=$pf1//$pi2;$mod=$pf1%$pi2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$iquot=$pi1//$pf2;$mod=$pi1%$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$iquot=$pi1//$pi2;$mod=$pi1%$pi2' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put -f '$iquot=$pf1//$pf2;$mod=$pf1%$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$iquot=$pf1//$pi2;$mod=$pf1%$pi2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$iquot=$pi1//$pf2;$mod=$pi1%$pf2' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$iquot=$pi1//$pi2;$mod=$pi1%$pi2' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put '$a=roundm($pf1,10.0);$b=roundm($pf1,-10.0)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$a=roundm($pf1,10) ;$b=roundm($pf1,-10) ' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$a=roundm($pi1,10.0);$b=roundm($pi1,-10.0)' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$a=roundm($pi1,10) ;$b=roundm($pi1,-10) ' $indir/mixed-types.xtab
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
announce DSL PYTHONIC DIVISION
|
||||
|
||||
run_mlr --xtab put '$quot=$pf1/10.0;$iquot=$pf1//10.0;$mod=$pf1%10.0' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$quot=$pi1/10 ;$iquot=$pi1//10 ;$mod=$pi1%10 ' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$quot=$nf1/10.0;$iquot=$nf1//10.0;$mod=$nf1%10.0' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$quot=$ni1/10 ;$iquot=$ni1//10 ;$mod=$ni1%10 ' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$quot=$pf1/10.0;$iquot=$pf1//10.0;$mod=$pf1%10.0' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$quot=$pi1/10 ;$iquot=$pi1//10 ;$mod=$pi1%10 ' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$quot=$nf1/10.0;$iquot=$nf1//10.0;$mod=$nf1%10.0' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$quot=$ni1/10 ;$iquot=$ni1//10 ;$mod=$ni1%10 ' $indir/mixed-types.xtab
|
||||
|
||||
run_mlr --xtab put '$quot=$pf1/-10.0;$iquot=$pf1//-10.0;$mod=$pf1%-10.0' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$quot=$pi1/-10 ;$iquot=$pi1//-10 ;$mod=$pi1%-10 ' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$quot=$nf1/-10.0;$iquot=$nf1//-10.0;$mod=$nf1%-10.0' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put '$quot=$ni1/-10 ;$iquot=$ni1//-10 ;$mod=$ni1%-10 ' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$quot=$pf1/-10.0;$iquot=$pf1//-10.0;$mod=$pf1%-10.0' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$quot=$pi1/-10 ;$iquot=$pi1//-10 ;$mod=$pi1%-10 ' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$quot=$nf1/-10.0;$iquot=$nf1//-10.0;$mod=$nf1%-10.0' $indir/mixed-types.xtab
|
||||
run_mlr --xtab put -f '$quot=$ni1/-10 ;$iquot=$ni1//-10 ;$mod=$ni1%-10 ' $indir/mixed-types.xtab
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
announce DSL REGEX MATCHING
|
||||
|
||||
run_mlr filter -v '$x =~ "bcd"' $indir/regex.dkvp
|
||||
run_mlr filter -v '$x =~ "^bcd"' $indir/regex.dkvp
|
||||
|
|
@ -423,20 +762,21 @@ run_mlr filter -v '$x =~ "^abc$"i' $indir/regex.dkvp
|
|||
run_mlr filter -v '$x =~ "^a.*d$"i' $indir/regex.dkvp
|
||||
run_mlr filter -v '$x =~ "^a.*"."d$"i' $indir/regex.dkvp
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
announce DSL DATETIME FUNCTIONS
|
||||
|
||||
run_mlr --csvlite put '$gmt=sec2gmt($sec)' $indir/sec2gmt
|
||||
run_mlr --csvlite put '$sec=gmt2sec($gmt)' $indir/gmt2sec
|
||||
|
||||
run_mlr --csvlite sec2gmt sec $indir/sec2gmt
|
||||
|
||||
run_mlr put '$z=min($x, $y)' $indir/minmax.dkvp
|
||||
run_mlr put '$z=max($x, $y)' $indir/minmax.dkvp
|
||||
|
||||
run_mlr --opprint put '$hms=sec2hms($sec); $resec=hms2sec($hms); $diff=$resec-$sec' $indir/sec2xhms
|
||||
run_mlr --opprint put '$hms=fsec2hms($sec); $resec=hms2fsec($hms); $diff=$resec-$sec' $indir/fsec2xhms
|
||||
run_mlr --opprint put '$hms=sec2dhms($sec); $resec=dhms2sec($hms); $diff=$resec-$sec' $indir/sec2xhms
|
||||
run_mlr --opprint put '$hms=fsec2dhms($sec); $resec=dhms2fsec($hms); $diff=$resec-$sec' $indir/fsec2xhms
|
||||
|
||||
announce SUB/GSUB
|
||||
# ----------------------------------------------------------------
|
||||
announce DSL SUB/GSUB
|
||||
|
||||
run_mlr --opprint put '$y = sub($x, "e.*l", "y123y")' $indir/sub.dat
|
||||
run_mlr --opprint put '$y = sub($x, "e.*l"i, "y123y")' $indir/sub.dat
|
||||
|
|
@ -614,7 +954,7 @@ run_mlr --icsvlite --oxtab cat $indir/utf8-2.csv
|
|||
|
||||
run_mlr --inidx --ifs space --opprint cat $indir/utf8-align.nidx
|
||||
run_mlr --inidx --ifs space --opprint --right cat $indir/utf8-align.nidx
|
||||
run_mlr --oxtab cat $indir/utf8-align.dkvp
|
||||
run_mlr --oxtab cat $indir/utf8-align.dkvp
|
||||
|
||||
run_mlr --inidx --ifs space --oxtab --xvright cat $indir/utf8-align.nidx
|
||||
|
||||
|
|
|
|||
16
c/todo.txt
16
c/todo.txt
|
|
@ -22,12 +22,17 @@ TOP OF LIST
|
|||
! try to get a grip on jb issues 1st
|
||||
|
||||
* full-int64 I/O & math:
|
||||
o expanded UTs x all of + - ~ * / // % abs ceil floor max min round roundm sgn. incl. ./tmod
|
||||
o UT for ~ ^^ | ^ & << >> in both grammars; UT for matches etc. in put grammar; sgn.
|
||||
- proofread associativity & precedence UTs
|
||||
- proofread int/float UTs x all of + - ~ * / // % abs ceil floor max min round roundm sgn. incl. ./tmod
|
||||
- proofread put/filter -s/-f tests
|
||||
! -75 // 10
|
||||
! 75 // -10
|
||||
o visually check all precedence stackings (horiz/vert) in the grammars
|
||||
o urandint -> w/urand @ mlr -h, mld, etc.
|
||||
o faqent '$y=~$x' vs. '$y= ~$x'; mlr filter '-$y==-$x' error @ cli parse due to leading -
|
||||
o faqent '$y=~$x' vs. '$y= ~$x'; also, mlr filter '-$y==-$x' error @ cli parse due to leading "-".
|
||||
o dsls bake deps
|
||||
o filter/put -s
|
||||
? $y = ! ! $x
|
||||
o more functional tests
|
||||
|
||||
Operators Associativity
|
||||
--------- -------------
|
||||
|
|
@ -43,8 +48,9 @@ TOP OF LIST
|
|||
< <= > >= left to right
|
||||
== != =~ !=~ left to right
|
||||
&& left to right
|
||||
^^ left to right
|
||||
|| left to right
|
||||
= N/A for Miller (these is no $a=$b=$c)
|
||||
= N/A for Miller (there is no $a=$b=$c)
|
||||
|
||||
* packaging:
|
||||
- brew version bump?!?
|
||||
|
|
|
|||
|
|
@ -809,6 +809,7 @@ binary+ binary- . left to right
|
|||
< <= > >= left to right
|
||||
== != =~ !=~ left to right
|
||||
&& left to right
|
||||
^^ left to right
|
||||
|| left to right
|
||||
= N/A for Miller (there is no $a=$b=$c)
|
||||
</pre>
|
||||
|
|
@ -826,8 +827,8 @@ library.
|
|||
<li/> Numbers in Miller are double-precision float or 64-bit signed integers.
|
||||
For most math functions, integers are cast to float on input, and produce float
|
||||
output. <li/> The following, however, produce integer output if all inputs are
|
||||
integers: <tt>+</tt> <tt>-</tt> <tt>~</tt> <tt>*</tt> <tt>/</tt> <tt>//</tt>
|
||||
<tt>%</tt> <tt>abs</tt> <tt>ceil</tt> <tt>floor</tt> <tt>max</tt> <tt>min</tt>
|
||||
integers: <tt>+</tt> <tt>-</tt> <tt>*</tt> <tt>/</tt> <tt>//</tt> <tt>%</tt>
|
||||
<tt>abs</tt> <tt>ceil</tt> <tt>floor</tt> <tt>max</tt> <tt>min</tt>
|
||||
<tt>round</tt> <tt>roundm</tt> <tt>sgn</tt>. Note that integer overflow is
|
||||
possible for large numbers when inputs look like integers. Explicit use of
|
||||
<tt>float()</tt> (e.g. replacing <tt>$c = $a * $b</tt> with <tt>$c = float($a)
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@
|
|||
.\" Title: mlr
|
||||
.\" Author: [see the "AUTHOR" section]
|
||||
.\" Generator: ./mkman.rb
|
||||
.\" Date: 2015-11-15
|
||||
.\" Date: 2015-11-16
|
||||
.\" Manual: \ \&
|
||||
.\" Source: \ \&
|
||||
.\" Language: English
|
||||
.\"
|
||||
.TH "MILLER" "1" "2015-11-15" "\ \&" "\ \&"
|
||||
.TH "MILLER" "1" "2015-11-16" "\ \&" "\ \&"
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" * Portability definitions
|
||||
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
@ -257,7 +257,8 @@ Please use "mlr --help-all-functions" or "mlr -f" for help on all functions.
|
|||
.RS 0
|
||||
.\}
|
||||
.nf
|
||||
--seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter urand().
|
||||
--seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter
|
||||
urand()/urandint().
|
||||
.fi
|
||||
.if n \{\
|
||||
.RE
|
||||
|
|
|
|||
|
|
@ -376,7 +376,8 @@ Numerical formatting:
|
|||
function within mlr put (mlr --help-all-functions).
|
||||
|
||||
Other options:
|
||||
--seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter urand().
|
||||
--seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter
|
||||
urand()/urandint().
|
||||
|
||||
Then-chaining:
|
||||
Output of one verb may be chained as input to another using "then", e.g.
|
||||
|
|
@ -2946,6 +2947,7 @@ binary+ binary- . left to right
|
|||
< <= > >= left to right
|
||||
== != =~ !=~ left to right
|
||||
&& left to right
|
||||
^^ left to right
|
||||
|| left to right
|
||||
= N/A for Miller (there is no $a=$b=$c)
|
||||
</pre>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue