#!/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[@]}" "$@"