Skip to content

Commit b33dcf5

Browse files
committed
issue/252: C++测试添加
1 parent 84bed58 commit b33dcf5

File tree

2 files changed

+57
-51
lines changed

2 files changed

+57
-51
lines changed

.github/workflows/build.yml

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,28 @@ jobs:
5252
- name: Python Test
5353
run: python scripts/python_test.py --cpu
5454

55-
- name: C++ Test
56-
run: python scripts/gguf_test.py --cpu
55+
- name: Gguf Generation Test
56+
run: python scripts/gguf_test.py --mode gguf
57+
58+
- name: C++ Test on Linux
59+
if: matrix.os == 'ubuntu-latest'
60+
run: |
61+
export LD_LIBRARY_PATH="$PWD/build/linux/x86_64/release:$LD_LIBRARY_PATH"
62+
tests=(add gemm mul random_sample swiglu clip)
63+
for t in "${tests[@]}"; do
64+
build/linux/x86_64/release/infiniop-test \
65+
test/infiniop-test/${t}.gguf \
66+
--cpu \
67+
--warmup 0 \
68+
--run 0
69+
done
70+
71+
- name: C++ Test on Windows
72+
if: matrix.os == 'windows-latest'
73+
run: |
74+
$exe = ".\build\windows\x64\release\infiniop-test.exe"
75+
$base = "test\infiniop-test"
76+
$tests = @("add","gemm","mul","random_sample","swiglu","clip")
77+
foreach ($t in $tests) {
78+
& $exe "$base\$t.gguf" "--cpu" "--warmup" "0" "--run" "0"
79+
}

scripts/gguf_test.py

Lines changed: 32 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,59 +2,42 @@
22
import sys
33
import subprocess
44
from set_env import set_env
5+
import argparse
56

6-
PROJECT_DIR = os.path.abspath(
7-
os.path.join(os.path.dirname(__file__), "..")
8-
)
9-
os.chdir(PROJECT_DIR)
10-
11-
def run_tests(test_names, device_type):
12-
failed = []
13-
base_dir = os.path.join(PROJECT_DIR, "test", "infiniop-test")
147

15-
for test in test_names:
8+
PROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
9+
os.chdir(PROJECT_DIR)
1610

17-
# GGUF 生成阶段
18-
cmd_gguf = f"python -m test_generate.testcases.{test}"
19-
res = subprocess.run(
20-
cmd_gguf,
21-
shell=True,
22-
cwd=base_dir
23-
)
24-
if res.returncode != 0:
25-
print(f"[ FAIL ] GGUF generation failed for {test}")
26-
failed.append(test)
27-
continue
28-
print("Files in build/linux/x86_64/release:")
29-
print(os.listdir(os.path.join(PROJECT_DIR, "build/linux/x86_64/release")))
30-
31-
# C++ 测试阶段
11+
def run(test, device, mode):
12+
base = os.path.join(PROJECT_DIR, "test", "infiniop-test")
13+
if mode in ("gguf", "all"):
14+
if subprocess.run(f"python -m test_generate.testcases.{test}",
15+
shell=True, cwd=base).returncode:
16+
return f"{test}: gguf failed"
17+
if mode in ("cpp", "all"):
3218
exe = os.path.join(PROJECT_DIR, "build/linux/x86_64/release/infiniop-test")
33-
gguf_path = os.path.join(base_dir, f"{test}.gguf")
34-
print(f"exe: {exe}, exists: {os.path.isfile(exe)}")
35-
print(f"gguf_path: {gguf_path}, exists: {os.path.isfile(gguf_path)}")
36-
cmd_cpp = f"{exe} {gguf_path} {device_type} --warmup 20 --run 1000"
37-
res = subprocess.run(
38-
cmd_cpp,
39-
shell=True,
40-
cwd=PROJECT_DIR
41-
)
42-
if res.returncode != 0:
43-
print(f"[ FAIL ] C++ test failed for {test}")
44-
failed.append(test)
45-
46-
return failed
47-
48-
if __name__ == "__main__":
19+
gguf = os.path.join(base, f"{test}.gguf")
20+
if subprocess.run(f"{exe} {gguf} --{device} --warmup 20 --run 1000",
21+
shell=True, cwd=PROJECT_DIR).returncode:
22+
return f"{test}: cpp failed"
23+
return None
24+
25+
def main():
26+
parser = argparse.ArgumentParser()
27+
parser.add_argument("--device", nargs="?", default="cpu")
28+
parser.add_argument("--mode", choices=["gguf", "cpp", "all"], default="all")
29+
args = parser.parse_args()
4930

5031
set_env()
51-
test_names = ["add", "gemm", "mul", "random_sample", "swiglu", "clip"]
52-
failed = run_tests(test_names, " ".join(sys.argv[1:]))
32+
tests = ["add", "gemm", "mul", "random_sample", "swiglu", "clip"]
33+
fails = [r for t in tests if (r := run(t, args.device, args.mode))]
34+
35+
if not fails:
36+
print("\n\033[92mAll tests passed!\033[0m")
37+
sys.exit(0)
38+
print("\033[91mSome tests failed:\033[0m")
39+
for f in fails: print(" -", f)
40+
sys.exit(1)
5341

54-
if len(failed) == 0:
55-
print("\033[92mAll tests passed!\033[0m")
56-
else:
57-
print("\033[91mThe following tests failed:\033[0m")
58-
for t in failed:
59-
print(f" - {t}")
60-
sys.exit(len(failed))
42+
if __name__ == "__main__":
43+
main()

0 commit comments

Comments
 (0)