1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
#! /bin/sh
# PCP QA Test No. 055
# pmie basic expression evaluation and scheduling
# for remote version using other hosts, see 360
# see also 694 for valgrind version of this test
#
# Copyright (c) 1995-2002 Silicon Graphics, Inc. All Rights Reserved.
#
seq=`basename $0`
echo "QA output created by $seq"
# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check
trap "rm -f $tmp.* /tmp/pmie.err; exit" 0 1 2 3 15
# here are the exercises
cat >>$tmp.config << \EOF
delta = 1 sec;
// the meaning of life, the universe and everything
sample.long.hundred - (16 * sample.float.ten + 11 * sample.double.one) / 3;
// instance domain exercises
inst_fetch1 = sample.bin;
inst_fetch2 = sample.bin #'bin-200' #'bin-400' #'bin-600' #'bin-800';
inst_neg = -sample.bin;
inst_rate = rate sample.bin;
inst_sum = sum_inst sample.bin;
inst_avg = avg_inst sample.bin;
inst_max = max_inst sample.bin;
inst_min = min_inst sample.bin;
inst_count = count_inst sample.bin > 400;
inst_add1 = sample.bin + sample.bin;
inst_add2 = sample.bin + sample.longlong.million;
inst_add3 = sample.longlong.million + sample.bin;
inst_sub = sample.bin - sample.bin;
inst_mul = sample.bin * sample.bin;
inst_div = sample.bin / sample.bin;
inst_eq1 = sample.bin == sample.bin;
inst_eq2 = sample.bin == sample.bin + 1;
inst_eq3 = sample.bin == 500;
inst_neq1 = sample.bin != sample.bin + 1;
inst_neq2 = sample.bin != sample.bin;
inst_neq3 = sample.bin != 500;
inst_gt1 = sample.bin + 1 > sample.bin;
inst_gt2 = sample.bin > sample.bin + 1;
inst_gt3 = sample.bin > 500;
inst_lt1 = sample.bin < sample.bin + 1;
inst_lt2 = sample.bin + 1 < sample.bin;
inst_lt3 = sample.bin < 500;
inst_geq1 = sample.bin >= sample.bin;
inst_geq2 = sample.bin >= sample.bin + 1;
inst_leq1 = sample.bin <= sample.bin;
inst_leq2 = sample.bin + 1 <= sample.bin;
// sample time domain exercises
time_fetch0 = sample.float.ten @0;
time_fetch1 = sample.float.ten @1;
time_fetch2 = sample.float.ten @2;
time_fetch01 = sample.float.ten @0..1;
time_fetch12 = sample.float.ten @1..2;
time_fetch02 = sample.float.ten @0..2;
time_sum = sum_sample sample.float.ten @0..2;
time_avg = avg_sample sample.float.ten @0..2;
time_max = max_sample sample.float.ten @0..2;
time_min = min_sample sample.float.ten @0..2;
time_count = count_sample sample.float.ten @0..2 >= 10;
time_add1 = sample.float.ten @0 + sample.float.ten @1 + sample.float.ten @2;
time_add2 = sample.float.ten @0..1 + sample.float.ten @1..2;
time_add3 = sample.float.ten @0..2 + 1;
time_add4 = 1 + sample.float.ten @0..2;
time_gt1 = sample.float.ten @0..1 + 1 > sample.float.ten @0..1;
time_gt2 = sample.float.ten @0..1 > sample.float.ten @0..1 + 1;
time_gt3 = sample.float.ten @0..2 + 1 > sample.float.ten @0..2;
time_gt4 = sample.float.ten @0..2 > sample.float.ten @0..2 + 1;
delta = 2 sec;
// multiple domains
multi1 = sum_sample avg_inst sample.bin @0..2;
multi2 = avg_inst sum_sample sample.bin @0..2;
delta = 3 sec;
// boolean operators
arg1 = "sample.bin >= 500";
arg2 = "sample.bin <= 500";
arg3 = "sample.bin < 1000";
arg4 = "sample.bin > 1000";
bool1 = $arg1;
bool2 = $arg2;
bool_not = ! $arg1;
bool_and = $arg1 && $arg2;
bool_or = $arg1 || $arg2;
bool_some1 = some_inst $arg1;
bool_some2 = some_inst $arg4;
bool_all1 = all_inst $arg3;
bool_all2 = all_inst $arg1;
bool_pcnt1 = 50 %_inst $arg1;
bool_pcnt2 = 70 %_inst $arg1;
bool_pcnt3 = 0 %_inst $arg4;
bool_pcnt4 = 100 %_inst $arg3;
delta = 4 sec;
// actions
act1 = true -> shell "echo >>/tmp/pmie.err act1 fired";
act2 = false -> shell "echo >>/tmp/pmie.err act2 fired OHH NOOOOO";
act3 = true -> shell "echo >>/tmp/pmie.err act3..." & shell "echo >>/tmp/pmie.err fired";
act4 = true -> shell "echo >>/tmp/pmie.err act 4 fired" | shell "echo >>/tmp/pmie.err OHH NOOOO";
EOF
cat $tmp.config >>$seq_full
$sudo rm -f /tmp/pmie.err
pmie -T 10 -v $tmp.config >$tmp.out 2>$tmp.err
( echo; echo "=== err ==="; cat $tmp.err ) >>$seq_full
# Especially on slow VMs (like bozo-vm) we may need to dodge warnings
# from pmie's rule scheduler around pmcd reconnection ... the awk
# script does this.
#
cat $tmp.err \
| $PCP_AWK_PROG '
skip == 1 && /^[^ ]/ { skip = 0 }
/^run: schedule eval/ { skip = 1 }
/^sleepTight: negative/ { skip = 1 }
/^Last sleepTight until:/ { skip = 1 }
/^This sleepTight\() entry:/ { skip = 1 }
/^Harvest children done:/ { skip = 1 }
/^Want sleepTight until:/ { skip = 1 }
/Task dump @/ { skip = 1 }
skip == 0 { print }' \
| _show_pmie_exit
( echo; echo "=== out ==="; cat $tmp.out ) >>$seq_full
cat $tmp.out | LC_COLLATE=POSIX sort
( echo; echo "=== /tmp/pmie.err ==="; cat /tmp/pmie.err ) >>$seq_full
cat /tmp/pmie.err | LC_COLLATE=POSIX sort
|