1#!/system/bin/sh
2#
3# Copyright (C) 2014 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#      http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17UNIT_TEST_DIR="jemalloc_unittests"
18
19UNIT_TESTS=( \
20  "atomic" \
21  "bitmap" \
22  "ckh" \
23  "decay" \
24  "hash" \
25  "junk" \
26  "junk_alloc" \
27  "junk_free" \
28  "lg_chunk" \
29  "mallctl" \
30  "math" \
31  "mq" \
32  "mtx" \
33  "nstime" \
34  "prng" \
35  "prof_accum" \
36  "prof_active" \
37  "prof_gdump" \
38  "prof_idump" \
39  "prof_reset" \
40  "prof_thread_name" \
41  "ql" \
42  "qr" \
43  "quarantine" \
44  "rb" \
45  "rtree" \
46  "run_quantize" \
47  "SFMT" \
48  "size_classes" \
49  "smoothstep" \
50  "stats" \
51  "ticker" \
52  "tsd" \
53  "util" \
54  "zero" \
55)
56
57INTEGRATION_TEST_DIR="jemalloc_integrationtests"
58
59INTEGRATION_TESTS=( \
60  "aligned_alloc" \
61  "allocated" \
62  "chunk" \
63  "MALLOCX_ARENA" \
64  "mallocx" \
65  "overflow" \
66  "posix_memalign" \
67  "rallocx" \
68  "sdallocx" \
69  "thread_arena" \
70  "thread_tcache_enabled" \
71  "xallocx" \
72)
73
74TEST_DIRECTORIES=( "/data/nativetest" "/data/nativetest64" )
75FAILING_TESTS=()
76
77function run_tests () {
78  local test_type=$1
79  shift
80  local test_dir=$1
81  shift
82  local test_list=$*
83  if [[ -d "${test_dir}" ]]; then
84    for test in ${test_list[@]}; do
85      echo "Running ${test_type} ${test}"
86      ${test_dir}/$test
87      local exit_val=$?
88      # 0 means all tests passed.
89      # 1 means all tests passed but some tests were skipped.
90      # 2 means at least one failure.
91      if [[ ${exit_val} -ne 0 ]] && [[ ${exit_val} -ne 1 ]]; then
92        echo "*** $test failed: ${exit_val}"
93        FAILING_TESTS+=("${test}")
94        EXIT_CODE=$((EXIT_CODE+1))
95      fi
96    done
97  fi
98}
99
100EXIT_CODE=0
101for test_dir in ${TEST_DIRECTORIES[@]}; do
102  if [[ -d "${test_dir}" ]]; then
103    run_tests "unit" "${test_dir}/${UNIT_TEST_DIR}" ${UNIT_TESTS[@]}
104    run_tests "integration" "${test_dir}/${INTEGRATION_TEST_DIR}" ${INTEGRATION_TESTS[@]}
105  fi
106done
107if [[ ${EXIT_CODE} -eq 0 ]]; then
108  echo "All tests passed"
109else
110  echo "List of failing tests:"
111  for fail in ${FAILING_TESTS[@]}; do
112    echo "  $fail"
113  done
114fi
115exit ${EXIT_CODE}
116