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  "a0" \
21  "arena_reset" \
22  "atomic" \
23  "bitmap" \
24  "ckh" \
25  "decay" \
26  "fork" \
27  "hash" \
28  "junk" \
29  "junk_alloc" \
30  "junk_free" \
31  "lg_chunk" \
32  "mallctl" \
33  "math" \
34  "mq" \
35  "mtx" \
36  "nstime" \
37  "pack" \
38  "pages" \
39  "prng" \
40  "prof_accum" \
41  "prof_active" \
42  "prof_gdump" \
43  "prof_idump" \
44  "prof_reset" \
45  "prof_thread_name" \
46  "ql" \
47  "qr" \
48  "quarantine" \
49  "rb" \
50  "rtree" \
51  "run_quantize" \
52  "SFMT" \
53  "size_classes" \
54  "smoothstep" \
55  "stats" \
56  "ticker" \
57  "tsd" \
58  "util" \
59  "witness" \
60  "zero" \
61)
62
63INTEGRATION_TEST_DIR="jemalloc_integrationtests"
64
65INTEGRATION_TESTS=( \
66  "aligned_alloc" \
67  "allocated" \
68  "chunk" \
69  "MALLOCX_ARENA" \
70  "mallocx" \
71  "overflow" \
72  "posix_memalign" \
73  "rallocx" \
74  "sdallocx" \
75  "thread_arena" \
76  "thread_tcache_enabled" \
77  "xallocx" \
78)
79
80TEST_DIRECTORIES=( "/data/nativetest" "/data/nativetest64" )
81FAILING_TESTS=()
82
83function run_tests () {
84  local test_type=$1
85  shift
86  local test_dir=$1
87  shift
88  local test_list=$*
89  if [[ -d "${test_dir}" ]]; then
90    for test in ${test_list[@]}; do
91      echo "Running ${test_type} ${test}"
92      ${test_dir}/$test
93      local exit_val=$?
94      # 0 means all tests passed.
95      # 1 means all tests passed but some tests were skipped.
96      # 2 means at least one failure.
97      if [[ ${exit_val} -ne 0 ]] && [[ ${exit_val} -ne 1 ]]; then
98        echo "*** $test failed: ${exit_val}"
99        FAILING_TESTS+=("${test}")
100        EXIT_CODE=$((EXIT_CODE+1))
101      fi
102    done
103  fi
104}
105
106EXIT_CODE=0
107for test_dir in ${TEST_DIRECTORIES[@]}; do
108  if [[ -d "${test_dir}" ]]; then
109    run_tests "unit" "${test_dir}/${UNIT_TEST_DIR}" ${UNIT_TESTS[@]}
110    run_tests "integration" "${test_dir}/${INTEGRATION_TEST_DIR}" ${INTEGRATION_TESTS[@]}
111  fi
112done
113if [[ ${EXIT_CODE} -eq 0 ]]; then
114  echo "All tests passed"
115else
116  echo "List of failing tests:"
117  for fail in ${FAILING_TESTS[@]}; do
118    echo "  $fail"
119  done
120fi
121exit ${EXIT_CODE}
122