From dfec9033f21100158cd49e76c28e6ded80f79281 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Wed, 25 May 2016 17:11:02 -0400 Subject: [PATCH] break/continue UT iterate --- c/mapping/mlr_dsl_cst.c | 4 +- c/reg_test/expected/out | 420 ++++++++++++++++++++++++++++++++++++++++ c/reg_test/run | 88 +++++++++ 3 files changed, 510 insertions(+), 2 deletions(-) diff --git a/c/mapping/mlr_dsl_cst.c b/c/mapping/mlr_dsl_cst.c index f239feab7..ae6c7e730 100644 --- a/c/mapping/mlr_dsl_cst.c +++ b/c/mapping/mlr_dsl_cst.c @@ -1629,10 +1629,10 @@ static void handle_for_srec( // xxx funcptrize handle_statement_list_with_break_continue(pnode->pblock_statements, pvars, pcst_outputs); if (pvars->loop_broken_or_continued & LOOP_BROKEN) { - pvars->loop_broken_or_continued |= ~LOOP_BROKEN; + pvars->loop_broken_or_continued &= ~LOOP_BROKEN; break; } else if (pvars->loop_broken_or_continued & LOOP_CONTINUED) { - pvars->loop_broken_or_continued |= ~LOOP_CONTINUED; + pvars->loop_broken_or_continued &= ~LOOP_CONTINUED; continue; } } diff --git a/c/reg_test/expected/out b/c/reg_test/expected/out index 879aba968..eb5779afe 100644 --- a/c/reg_test/expected/out +++ b/c/reg_test/expected/out @@ -15912,6 +15912,426 @@ mean hat cat 0.503701 mean hat dog 0.475824 +================================================================ +BREAK/CONTINUE + +mlr --opprint --from ./reg_test/input/abixy put -q + for (k,v in $*) { + @logging1[NR][k] = v; + if (k == "x") { + break; + } + } + end { + emitp @logging1, "NR", "k"; + } + +NR k logging1 +1 a pan +1 b pan +1 i 1 +1 x 0.3467901443380824 +2 a eks +2 b pan +2 i 2 +2 x 0.7586799647899636 +3 a wye +3 b wye +3 i 3 +3 x 0.20460330576630303 +4 a eks +4 b wye +4 i 4 +4 x 0.38139939387114097 +5 a wye +5 b pan +5 i 5 +5 x 0.5732889198020006 +6 a zee +6 b pan +6 i 6 +6 x 0.5271261600918548 +7 a eks +7 b zee +7 i 7 +7 x 0.6117840605678454 +8 a zee +8 b wye +8 i 8 +8 x 0.5985540091064224 +9 a hat +9 b wye +9 i 9 +9 x 0.03144187646093577 +10 a pan +10 b wye +10 i 10 +10 x 0.5026260055412137 + +mlr --opprint --from ./reg_test/input/abixy put -q + for (k,v in $*) { + if (k == "x") { + break; + } + @logging2[NR][k] = v; + } + end { + emitp @logging2, "NR", "k"; + } + +NR k logging2 +1 a pan +1 b pan +1 i 1 +2 a eks +2 b pan +2 i 2 +3 a wye +3 b wye +3 i 3 +4 a eks +4 b wye +4 i 4 +5 a wye +5 b pan +5 i 5 +6 a zee +6 b pan +6 i 6 +7 a eks +7 b zee +7 i 7 +8 a zee +8 b wye +8 i 8 +9 a hat +9 b wye +9 i 9 +10 a pan +10 b wye +10 i 10 + +mlr --opprint --from ./reg_test/input/abixy put -q + for (k,v in $*) { + @logging3[NR][k] = v; + if (k == "x") { + continue; + } + } + end { + emitp @logging3, "NR", "k"; + } + +NR k logging3 +1 a pan +1 b pan +1 i 1 +1 x 0.3467901443380824 +1 y 0.7268028627434533 +2 a eks +2 b pan +2 i 2 +2 x 0.7586799647899636 +2 y 0.5221511083334797 +3 a wye +3 b wye +3 i 3 +3 x 0.20460330576630303 +3 y 0.33831852551664776 +4 a eks +4 b wye +4 i 4 +4 x 0.38139939387114097 +4 y 0.13418874328430463 +5 a wye +5 b pan +5 i 5 +5 x 0.5732889198020006 +5 y 0.8636244699032729 +6 a zee +6 b pan +6 i 6 +6 x 0.5271261600918548 +6 y 0.49322128674835697 +7 a eks +7 b zee +7 i 7 +7 x 0.6117840605678454 +7 y 0.1878849191181694 +8 a zee +8 b wye +8 i 8 +8 x 0.5985540091064224 +8 y 0.976181385699006 +9 a hat +9 b wye +9 i 9 +9 x 0.03144187646093577 +9 y 0.7495507603507059 +10 a pan +10 b wye +10 i 10 +10 x 0.5026260055412137 +10 y 0.9526183602969864 + +mlr --opprint --from ./reg_test/input/abixy put -q + for (k,v in $*) { + if (k == "x") { + continue; + } + @logging4[NR][k] = v; + } + end { + emitp @logging4, "NR", "k" + } + +NR k logging4 +1 a pan +1 b pan +1 i 1 +1 y 0.7268028627434533 +2 a eks +2 b pan +2 i 2 +2 y 0.5221511083334797 +3 a wye +3 b wye +3 i 3 +3 y 0.33831852551664776 +4 a eks +4 b wye +4 i 4 +4 y 0.13418874328430463 +5 a wye +5 b pan +5 i 5 +5 y 0.8636244699032729 +6 a zee +6 b pan +6 i 6 +6 y 0.49322128674835697 +7 a eks +7 b zee +7 i 7 +7 y 0.1878849191181694 +8 a zee +8 b wye +8 i 8 +8 y 0.976181385699006 +9 a hat +9 b wye +9 i 9 +9 y 0.7495507603507059 +10 a pan +10 b wye +10 i 10 +10 y 0.9526183602969864 + +mlr --opprint --from ./reg_test/input/abixy put -q + for (k,v in $*) { + @logging1[NR][k] = v; + if (k == "x") { + break; + } + } + + for (k,v in $*) { + if (k == "x") { + break; + } + @logging2[NR][k] = v; + } + + for (k,v in $*) { + @logging3[NR][k] = v; + if (k == "x") { + continue; + } + } + + for (k,v in $*) { + if (k == "x") { + continue; + } + @logging4[NR][k] = v; + } + + end { + emitp @logging1, "NR", "k"; + emitp @logging2, "NR", "k"; + emitp @logging3, "NR", "k"; + emitp @logging4, "NR", "k" + } + +NR k logging1 +1 a pan +1 b pan +1 i 1 +1 x 0.3467901443380824 +2 a eks +2 b pan +2 i 2 +2 x 0.7586799647899636 +3 a wye +3 b wye +3 i 3 +3 x 0.20460330576630303 +4 a eks +4 b wye +4 i 4 +4 x 0.38139939387114097 +5 a wye +5 b pan +5 i 5 +5 x 0.5732889198020006 +6 a zee +6 b pan +6 i 6 +6 x 0.5271261600918548 +7 a eks +7 b zee +7 i 7 +7 x 0.6117840605678454 +8 a zee +8 b wye +8 i 8 +8 x 0.5985540091064224 +9 a hat +9 b wye +9 i 9 +9 x 0.03144187646093577 +10 a pan +10 b wye +10 i 10 +10 x 0.5026260055412137 + +NR k logging2 +1 a pan +1 b pan +1 i 1 +2 a eks +2 b pan +2 i 2 +3 a wye +3 b wye +3 i 3 +4 a eks +4 b wye +4 i 4 +5 a wye +5 b pan +5 i 5 +6 a zee +6 b pan +6 i 6 +7 a eks +7 b zee +7 i 7 +8 a zee +8 b wye +8 i 8 +9 a hat +9 b wye +9 i 9 +10 a pan +10 b wye +10 i 10 + +NR k logging3 +1 a pan +1 b pan +1 i 1 +1 x 0.3467901443380824 +1 y 0.7268028627434533 +2 a eks +2 b pan +2 i 2 +2 x 0.7586799647899636 +2 y 0.5221511083334797 +3 a wye +3 b wye +3 i 3 +3 x 0.20460330576630303 +3 y 0.33831852551664776 +4 a eks +4 b wye +4 i 4 +4 x 0.38139939387114097 +4 y 0.13418874328430463 +5 a wye +5 b pan +5 i 5 +5 x 0.5732889198020006 +5 y 0.8636244699032729 +6 a zee +6 b pan +6 i 6 +6 x 0.5271261600918548 +6 y 0.49322128674835697 +7 a eks +7 b zee +7 i 7 +7 x 0.6117840605678454 +7 y 0.1878849191181694 +8 a zee +8 b wye +8 i 8 +8 x 0.5985540091064224 +8 y 0.976181385699006 +9 a hat +9 b wye +9 i 9 +9 x 0.03144187646093577 +9 y 0.7495507603507059 +10 a pan +10 b wye +10 i 10 +10 x 0.5026260055412137 +10 y 0.9526183602969864 + +NR k logging4 +1 a pan +1 b pan +1 i 1 +1 y 0.7268028627434533 +2 a eks +2 b pan +2 i 2 +2 y 0.5221511083334797 +3 a wye +3 b wye +3 i 3 +3 y 0.33831852551664776 +4 a eks +4 b wye +4 i 4 +4 y 0.13418874328430463 +5 a wye +5 b pan +5 i 5 +5 y 0.8636244699032729 +6 a zee +6 b pan +6 i 6 +6 y 0.49322128674835697 +7 a eks +7 b zee +7 i 7 +7 y 0.1878849191181694 +8 a zee +8 b wye +8 i 8 +8 y 0.976181385699006 +9 a hat +9 b wye +9 i 9 +9 y 0.7495507603507059 +10 a pan +10 b wye +10 i 10 +10 y 0.9526183602969864 + + ================================================================ DSL CONTEXT-SPECIFIC VALIDATION diff --git a/c/reg_test/run b/c/reg_test/run index 28feaea0f..a5db09f08 100755 --- a/c/reg_test/run +++ b/c/reg_test/run @@ -1706,6 +1706,94 @@ run_mlr --opprint --from $indir/abixy-wide put -q ' } ' +# ================================================================ +announce BREAK/CONTINUE + +run_mlr --opprint --from $indir/abixy put -q ' + for (k,v in $*) { + @logging1[NR][k] = v; + if (k == "x") { + break; + } + } + end { + emitp @logging1, "NR", "k"; + } +' + +run_mlr --opprint --from $indir/abixy put -q ' + for (k,v in $*) { + if (k == "x") { + break; + } + @logging2[NR][k] = v; + } + end { + emitp @logging2, "NR", "k"; + } +' + +run_mlr --opprint --from $indir/abixy put -q ' + for (k,v in $*) { + @logging3[NR][k] = v; + if (k == "x") { + continue; + } + } + end { + emitp @logging3, "NR", "k"; + } +' + +run_mlr --opprint --from $indir/abixy put -q ' + for (k,v in $*) { + if (k == "x") { + continue; + } + @logging4[NR][k] = v; + } + end { + emitp @logging4, "NR", "k" + } +' + +run_mlr --opprint --from $indir/abixy put -q ' + for (k,v in $*) { + @logging1[NR][k] = v; + if (k == "x") { + break; + } + } + + for (k,v in $*) { + if (k == "x") { + break; + } + @logging2[NR][k] = v; + } + + for (k,v in $*) { + @logging3[NR][k] = v; + if (k == "x") { + continue; + } + } + + for (k,v in $*) { + if (k == "x") { + continue; + } + @logging4[NR][k] = v; + } + + end { + emitp @logging1, "NR", "k"; + emitp @logging2, "NR", "k"; + emitp @logging3, "NR", "k"; + emitp @logging4, "NR", "k" + } +' + # ================================================================ announce DSL CONTEXT-SPECIFIC VALIDATION