added test code for variadic arguments
This commit is contained in:
		
							
								
								
									
										38
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								README.md
									
									
									
									
									
								
							| @ -90,6 +90,44 @@ A HCL program is composed of expressions. | |||||||
| (printf "%d\n" (+ 10 20)) | (printf "%d\n" (+ 10 20)) | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | ## Variadic arguments | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | (defun fn-y (t1 t2 va-ctx) | ||||||
|  |         | i | | ||||||
|  |         (set i 0) | ||||||
|  |         (while (< i (va-count va-ctx)) | ||||||
|  |                 (printf "fn-y=>Y-VA[%d]=>[%d]\n" i (va-get i va-ctx)) | ||||||
|  |                 (set i (+ i 1)) | ||||||
|  |         ) | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | (defun x(a b ... ::: x y z) | ||||||
|  |         |i| | ||||||
|  |  | ||||||
|  | ;       (printf "VA_COUNT(x) = %d\n" (va-count)) | ||||||
|  |         (set x "xxx") | ||||||
|  |         (set y "yyy") | ||||||
|  |         (set z "zzz") | ||||||
|  |         (set z (+ a b)) | ||||||
|  |  | ||||||
|  |         (set i 0) | ||||||
|  |         (while (< i (va-count)) | ||||||
|  |                 (printf "VA[%d]=>[%d]\n" i (va-get i)) | ||||||
|  |                 (set i (+ i 1)) | ||||||
|  |         ) | ||||||
|  |         (fn-y "hello" "world" (va-context)) | ||||||
|  |  | ||||||
|  |         (return) | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | (printf "--------------------------\n") | ||||||
|  | (printf "[%O]\n" (x 10 20 30)) | ||||||
|  | (printf "--------------------------\n") | ||||||
|  | (set q (set-r a b c (x 10 20 30 40 50))) | ||||||
|  | (printf "--------------------------\n") | ||||||
|  | ``` | ||||||
|  |  | ||||||
| ## HCL Exchange Protocol | ## HCL Exchange Protocol | ||||||
|  |  | ||||||
| The HCL library contains a simple server/client libraries that can exchange | The HCL library contains a simple server/client libraries that can exchange | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ check_SCRIPTS = \ | |||||||
| 	insta-02.hcl \ | 	insta-02.hcl \ | ||||||
| 	ret-01.hcl \ | 	ret-01.hcl \ | ||||||
| 	retvar-01.hcl \ | 	retvar-01.hcl \ | ||||||
|  | 	va-01.hcl \ | ||||||
| 	var-01.hcl  | 	var-01.hcl  | ||||||
|  |  | ||||||
| ##noinst_SCRIPTS = $(check_SCRIPTS) | ##noinst_SCRIPTS = $(check_SCRIPTS) | ||||||
|  | |||||||
| @ -466,6 +466,7 @@ check_SCRIPTS = \ | |||||||
| 	insta-02.hcl \ | 	insta-02.hcl \ | ||||||
| 	ret-01.hcl \ | 	ret-01.hcl \ | ||||||
| 	retvar-01.hcl \ | 	retvar-01.hcl \ | ||||||
|  | 	va-01.hcl \ | ||||||
| 	var-01.hcl  | 	var-01.hcl  | ||||||
|  |  | ||||||
| EXTRA_DIST = $(check_SCRIPTS) | EXTRA_DIST = $(check_SCRIPTS) | ||||||
|  | |||||||
							
								
								
									
										41
									
								
								t/va-01.hcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								t/va-01.hcl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | (defun fn-y (t1 t2 va-ctx) | ||||||
|  |         | i | | ||||||
|  |         (set i 0) | ||||||
|  |         (while (< i (va-count va-ctx)) | ||||||
|  |                 (printf "fn-y=>Y-VA[%d]=>[%d]\n" i (va-get i va-ctx)) | ||||||
|  |                 (set i (+ i 1)) | ||||||
|  |         ) | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | (defun x(a b ... ::: x y z) | ||||||
|  |         |i| | ||||||
|  |  | ||||||
|  |         (set x (va-count)) | ||||||
|  |         (set y (* a b)) | ||||||
|  |         (set z (+ a b)) | ||||||
|  |  | ||||||
|  |         (set i 0) | ||||||
|  |         (while (< i (va-count)) | ||||||
|  |                 (printf "VA[%d]=>[%d]\n" i (va-get i)) | ||||||
|  |                 (set i (+ i 1)) | ||||||
|  |         ) | ||||||
|  |         (fn-y "hello" "world" (va-context)) | ||||||
|  |  | ||||||
|  |         (return) | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | (set t (x 10 20 30)) | ||||||
|  | (if (/= t 1) (printf "ERROR: t is not 1\n") | ||||||
|  |  else (printf "OK: %d\n" t)) | ||||||
|  |  | ||||||
|  | (set t (set-r a b c (x 10 20 30 40 50))) | ||||||
|  | (if (/= t 3) (printf "ERROR: t is not 3\n") | ||||||
|  |  else (printf "OK: %d\n" t)) | ||||||
|  | (if (/= a 3) (printf "ERROR: a is not 3\n") | ||||||
|  |  else (printf "OK: %d\n" a)) | ||||||
|  | (if (/= b 200) (printf "ERROR: b is not 200\n") | ||||||
|  |  else (printf "OK: %d\n" b)) | ||||||
|  | (if (/= c 30) (printf "ERROR: c is not 30\n") | ||||||
|  |  else (printf "OK: %d\n" c)) | ||||||
|  |  | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user