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