#!/system/bin/sh
#
# Copyright (C) 2014 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

UNIT_TEST_DIR="jemalloc_unittests"

UNIT_TESTS=( \
  "a0" \
  "arena_reset" \
  "atomic" \
  "bitmap" \
  "ckh" \
  "decay" \
  "fork" \
  "hash" \
  "junk" \
  "junk_alloc" \
  "junk_free" \
  "lg_chunk" \
  "mallctl" \
  "math" \
  "mq" \
  "mtx" \
  "nstime" \
  "prng" \
  "prof_accum" \
  "prof_active" \
  "prof_gdump" \
  "prof_idump" \
  "prof_reset" \
  "prof_thread_name" \
  "ql" \
  "qr" \
  "quarantine" \
  "rb" \
  "rtree" \
  "run_quantize" \
  "SFMT" \
  "size_classes" \
  "smoothstep" \
  "stats" \
  "ticker" \
  "tsd" \
  "util" \
  "witness" \
  "zero" \
)

INTEGRATION_TEST_DIR="jemalloc_integrationtests"

INTEGRATION_TESTS=( \
  "aligned_alloc" \
  "allocated" \
  "chunk" \
  "MALLOCX_ARENA" \
  "mallocx" \
  "overflow" \
  "posix_memalign" \
  "rallocx" \
  "sdallocx" \
  "thread_arena" \
  "thread_tcache_enabled" \
  "xallocx" \
)

TEST_DIRECTORIES=( "/data/nativetest" "/data/nativetest64" )
FAILING_TESTS=()

function run_tests () {
  local test_type=$1
  shift
  local test_dir=$1
  shift
  local test_list=$*
  if [[ -d "${test_dir}" ]]; then
    for test in ${test_list[@]}; do
      echo "Running ${test_type} ${test}"
      ${test_dir}/$test
      local exit_val=$?
      # 0 means all tests passed.
      # 1 means all tests passed but some tests were skipped.
      # 2 means at least one failure.
      if [[ ${exit_val} -ne 0 ]] && [[ ${exit_val} -ne 1 ]]; then
        echo "*** $test failed: ${exit_val}"
        FAILING_TESTS+=("${test}")
        EXIT_CODE=$((EXIT_CODE+1))
      fi
    done
  fi
}

EXIT_CODE=0
for test_dir in ${TEST_DIRECTORIES[@]}; do
  if [[ -d "${test_dir}" ]]; then
    run_tests "unit" "${test_dir}/${UNIT_TEST_DIR}" ${UNIT_TESTS[@]}
    run_tests "integration" "${test_dir}/${INTEGRATION_TEST_DIR}" ${INTEGRATION_TESTS[@]}
  fi
done
if [[ ${EXIT_CODE} -eq 0 ]]; then
  echo "All tests passed"
else
  echo "List of failing tests:"
  for fail in ${FAILING_TESTS[@]}; do
    echo "  $fail"
  done
fi
exit ${EXIT_CODE}
