22import sys
33import subprocess
44from 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