File: 055

package info (click to toggle)
pcp 7.1.0-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 252,748 kB
  • sloc: ansic: 1,483,656; sh: 182,366; xml: 160,462; cpp: 83,813; python: 24,980; perl: 18,327; yacc: 6,877; lex: 2,864; makefile: 2,738; awk: 165; fortran: 60; java: 52
file content (141 lines) | stat: -rwxr-xr-x 4,917 bytes parent folder | download
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