1ccba8b64SMathieu Desnoyers#!/bin/bash
2ccba8b64SMathieu Desnoyers# SPDX-License-Identifier: GPL-2.0+ or MIT
3ccba8b64SMathieu Desnoyers
4ccba8b64SMathieu DesnoyersEXTRA_ARGS=${@}
5ccba8b64SMathieu Desnoyers
6ccba8b64SMathieu DesnoyersOLDIFS="$IFS"
7ccba8b64SMathieu DesnoyersIFS=$'\n'
8ccba8b64SMathieu DesnoyersTEST_LIST=(
9ccba8b64SMathieu Desnoyers	"-T s"
10ccba8b64SMathieu Desnoyers	"-T l"
11ccba8b64SMathieu Desnoyers	"-T b"
12ccba8b64SMathieu Desnoyers	"-T b -M"
13ccba8b64SMathieu Desnoyers	"-T m"
14ccba8b64SMathieu Desnoyers	"-T m -M"
15ccba8b64SMathieu Desnoyers	"-T i"
16ccba8b64SMathieu Desnoyers)
17ccba8b64SMathieu Desnoyers
18ccba8b64SMathieu DesnoyersTEST_NAME=(
19ccba8b64SMathieu Desnoyers	"spinlock"
20ccba8b64SMathieu Desnoyers	"list"
21ccba8b64SMathieu Desnoyers	"buffer"
22ccba8b64SMathieu Desnoyers	"buffer with barrier"
23ccba8b64SMathieu Desnoyers	"memcpy"
24ccba8b64SMathieu Desnoyers	"memcpy with barrier"
25ccba8b64SMathieu Desnoyers	"increment"
26ccba8b64SMathieu Desnoyers)
27ccba8b64SMathieu DesnoyersIFS="$OLDIFS"
28ccba8b64SMathieu Desnoyers
29ccba8b64SMathieu DesnoyersREPS=1000
30ccba8b64SMathieu DesnoyersSLOW_REPS=100
31ccba8b64SMathieu Desnoyers
32ccba8b64SMathieu Desnoyersfunction do_tests()
33ccba8b64SMathieu Desnoyers{
34ccba8b64SMathieu Desnoyers	local i=0
35ccba8b64SMathieu Desnoyers	while [ "$i" -lt "${#TEST_LIST[@]}" ]; do
36ccba8b64SMathieu Desnoyers		echo "Running test ${TEST_NAME[$i]}"
37ccba8b64SMathieu Desnoyers		./param_test ${TEST_LIST[$i]} -r ${REPS} ${@} ${EXTRA_ARGS} || exit 1
38ccba8b64SMathieu Desnoyers		echo "Running compare-twice test ${TEST_NAME[$i]}"
39ccba8b64SMathieu Desnoyers		./param_test_compare_twice ${TEST_LIST[$i]} -r ${REPS} ${@} ${EXTRA_ARGS} || exit 1
40ccba8b64SMathieu Desnoyers		let "i++"
41ccba8b64SMathieu Desnoyers	done
42ccba8b64SMathieu Desnoyers}
43ccba8b64SMathieu Desnoyers
44ccba8b64SMathieu Desnoyersecho "Default parameters"
45ccba8b64SMathieu Desnoyersdo_tests
46ccba8b64SMathieu Desnoyers
47ccba8b64SMathieu Desnoyersecho "Loop injection: 10000 loops"
48ccba8b64SMathieu Desnoyers
49ccba8b64SMathieu DesnoyersOLDIFS="$IFS"
50ccba8b64SMathieu DesnoyersIFS=$'\n'
51ccba8b64SMathieu DesnoyersINJECT_LIST=(
52ccba8b64SMathieu Desnoyers	"1"
53ccba8b64SMathieu Desnoyers	"2"
54ccba8b64SMathieu Desnoyers	"3"
55ccba8b64SMathieu Desnoyers	"4"
56ccba8b64SMathieu Desnoyers	"5"
57ccba8b64SMathieu Desnoyers	"6"
58ccba8b64SMathieu Desnoyers	"7"
59ccba8b64SMathieu Desnoyers	"8"
60ccba8b64SMathieu Desnoyers	"9"
61ccba8b64SMathieu Desnoyers)
62ccba8b64SMathieu DesnoyersIFS="$OLDIFS"
63ccba8b64SMathieu Desnoyers
64ccba8b64SMathieu DesnoyersNR_LOOPS=10000
65ccba8b64SMathieu Desnoyers
66ccba8b64SMathieu Desnoyersi=0
67ccba8b64SMathieu Desnoyerswhile [ "$i" -lt "${#INJECT_LIST[@]}" ]; do
68ccba8b64SMathieu Desnoyers	echo "Injecting at <${INJECT_LIST[$i]}>"
69ccba8b64SMathieu Desnoyers	do_tests -${INJECT_LIST[i]} ${NR_LOOPS}
70ccba8b64SMathieu Desnoyers	let "i++"
71ccba8b64SMathieu Desnoyersdone
72ccba8b64SMathieu DesnoyersNR_LOOPS=
73ccba8b64SMathieu Desnoyers
74ccba8b64SMathieu Desnoyersfunction inject_blocking()
75ccba8b64SMathieu Desnoyers{
76ccba8b64SMathieu Desnoyers	OLDIFS="$IFS"
77ccba8b64SMathieu Desnoyers	IFS=$'\n'
78ccba8b64SMathieu Desnoyers	INJECT_LIST=(
79ccba8b64SMathieu Desnoyers		"7"
80ccba8b64SMathieu Desnoyers		"8"
81ccba8b64SMathieu Desnoyers		"9"
82ccba8b64SMathieu Desnoyers	)
83ccba8b64SMathieu Desnoyers	IFS="$OLDIFS"
84ccba8b64SMathieu Desnoyers
85ccba8b64SMathieu Desnoyers	NR_LOOPS=-1
86ccba8b64SMathieu Desnoyers
87ccba8b64SMathieu Desnoyers	i=0
88ccba8b64SMathieu Desnoyers	while [ "$i" -lt "${#INJECT_LIST[@]}" ]; do
89ccba8b64SMathieu Desnoyers		echo "Injecting at <${INJECT_LIST[$i]}>"
90ccba8b64SMathieu Desnoyers		do_tests -${INJECT_LIST[i]} -1 ${@}
91ccba8b64SMathieu Desnoyers		let "i++"
92ccba8b64SMathieu Desnoyers	done
93ccba8b64SMathieu Desnoyers	NR_LOOPS=
94ccba8b64SMathieu Desnoyers}
95ccba8b64SMathieu Desnoyers
96ccba8b64SMathieu Desnoyersecho "Yield injection (25%)"
97ccba8b64SMathieu Desnoyersinject_blocking -m 4 -y
98ccba8b64SMathieu Desnoyers
99ccba8b64SMathieu Desnoyersecho "Yield injection (50%)"
100ccba8b64SMathieu Desnoyersinject_blocking -m 2 -y
101ccba8b64SMathieu Desnoyers
102ccba8b64SMathieu Desnoyersecho "Yield injection (100%)"
103ccba8b64SMathieu Desnoyersinject_blocking -m 1 -y
104ccba8b64SMathieu Desnoyers
105ccba8b64SMathieu Desnoyersecho "Kill injection (25%)"
106ccba8b64SMathieu Desnoyersinject_blocking -m 4 -k
107ccba8b64SMathieu Desnoyers
108ccba8b64SMathieu Desnoyersecho "Kill injection (50%)"
109ccba8b64SMathieu Desnoyersinject_blocking -m 2 -k
110ccba8b64SMathieu Desnoyers
111ccba8b64SMathieu Desnoyersecho "Kill injection (100%)"
112ccba8b64SMathieu Desnoyersinject_blocking -m 1 -k
113ccba8b64SMathieu Desnoyers
114ccba8b64SMathieu Desnoyersecho "Sleep injection (1ms, 25%)"
115ccba8b64SMathieu Desnoyersinject_blocking -m 4 -s 1
116ccba8b64SMathieu Desnoyers
117ccba8b64SMathieu Desnoyersecho "Sleep injection (1ms, 50%)"
118ccba8b64SMathieu Desnoyersinject_blocking -m 2 -s 1
119ccba8b64SMathieu Desnoyers
120ccba8b64SMathieu Desnoyersecho "Sleep injection (1ms, 100%)"
121ccba8b64SMathieu Desnoyersinject_blocking -m 1 -s 1
122