#!/usr/bin/env bash
# 在内存吃紧的共享机器上稳定跑单测。
#
# 背景:默认仓颉运行时每个测试二进制预留 ~256MB 堆 + 按 CPU 核数起线程。
# 当整机可用内存很低(共享/长跑机器),macOS jetsam 会 SIGKILL(exit 9)这些
# 吃内存的测试进程,表现为 cjpm test 间歇/持续 "failed to run package (exit code = 9)"。
# 这里给测试进程设小堆 + 限并发线程,把单进程内存占用压下来即可稳定通过。
#
# 用法:
#   scripts/test.sh                 # 全 workspace
#   scripts/test.sh -m ace-web      # 单个成员
#   scripts/test.sh -m ace-web ...  # 透传其余 cjpm test 参数
set -eo pipefail
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# shellcheck disable=SC1091
source "$DIR/scripts/env.sh"
set -u

# 运行时内存上限(见 cangjie runtime 环境变量):
export cjHeapSize="${cjHeapSize:-128MB}"      # 单进程堆上限(默认 256MB)
export cjProcessorNum="${cjProcessorNum:-2}"  # 仓颉线程并发上限(默认 = CPU 核数)
export cjStackSize="${cjStackSize:-128KB}"    # 线程栈

# CJPM 默认并发启动多个测试包,内存紧张时即使限制了包内线程,仍可能被 macOS
# 以 SIGKILL(exit 9) 终止。默认串行执行;调用方显式传 --parallel 时尊重其设置。
parallel_args=(--parallel "${CJPM_TEST_PARALLEL:-1}")
for arg in "$@"; do
  case "$arg" in
    --parallel|--parallel=*) parallel_args=(); break ;;
  esac
done

# --no-capture-output 同时避开捕获管道的额外开销。
exec cjpm test --no-capture-output "${parallel_args[@]}" "$@"