43 lines
		
	
	
		
			664 B
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			664 B
		
	
	
	
		
			V
		
	
	
| interface Element {
 | |
| 	method(params ...f64) string
 | |
| }
 | |
| 
 | |
| struct Foo {}
 | |
| 
 | |
| fn (f &Foo) method(params ...f64) string {
 | |
| 	return params.str()
 | |
| }
 | |
| 
 | |
| fn test_variadic_array_decompose() {
 | |
| 	mut a := []Element{}
 | |
| 	a << Foo{}
 | |
| 
 | |
| 	input := [0.0, 1.0]
 | |
| 	assert a[0].method(...input) == '[0, 1]'
 | |
| 	assert a[0].method(...[0.0, 1.0]) == '[0, 1]'
 | |
| }
 | |
| 
 | |
| fn test_variadic_multiple_args() {
 | |
| 	mut a := []Element{}
 | |
| 	a << Foo{}
 | |
| 
 | |
| 	assert a[0].method(0.0, 1.0) == '[0, 1]'
 | |
| }
 | |
| 
 | |
| interface Animal {}
 | |
| 
 | |
| struct Cat {}
 | |
| 
 | |
| struct Dog {}
 | |
| 
 | |
| fn test_variadic_interface_fn_arg() {
 | |
| 	c := Cat{}
 | |
| 	d := Dog{}
 | |
| 	check_animals(c, d)
 | |
| }
 | |
| 
 | |
| fn check_animals(animals ...Animal) {
 | |
| 	assert animals[0] is Cat
 | |
| 	assert animals[1] is Dog
 | |
| }
 |