1- from lpython import CPtr , i64 , sizeof , i32 , i16 , i8 , ccall , c_p_pointer , empty_c_void_p , Pointer , pointer
2- from numpy import empty , int64 , array
1+ from lpython import (CPtr , sizeof , ccall , c_p_pointer , empty_c_void_p ,
2+ i64 , i32 , i16 , i8 ,
3+ u64 , u32 , u16 , u8 ,
4+ Pointer , pointer , u16 )
5+ from numpy import array
36
47@ccall
58def _lfortran_malloc (size : i32 ) -> CPtr :
69 pass
710
8- def allocate_memory (size : i32 ) -> tuple [CPtr , CPtr , CPtr , CPtr ]:
11+ def allocate_memory (size : i32 ) -> tuple [CPtr , CPtr , CPtr , CPtr , \
12+ CPtr , CPtr , CPtr , CPtr ]:
913 array1 : CPtr = _lfortran_malloc (size * i32 (sizeof (i8 )))
1014 array2 : CPtr = _lfortran_malloc (size * i32 (sizeof (i16 )))
1115 array3 : CPtr = _lfortran_malloc (size * i32 (sizeof (i32 )))
1216 array4 : CPtr = _lfortran_malloc (size * i32 (sizeof (i64 )))
13- return array1 , array2 , array3 , array4
17+ array5 : CPtr = _lfortran_malloc (size * i32 (sizeof (u8 )))
18+ array6 : CPtr = _lfortran_malloc (size * i32 (sizeof (u16 )))
19+ array7 : CPtr = _lfortran_malloc (size * i32 (sizeof (u32 )))
20+ array8 : CPtr = _lfortran_malloc (size * i32 (sizeof (u64 )))
21+ return array1 , array2 , array3 , array4 , array5 , array6 , array7 , array8
1422
15- def sum_arrays (array1 : CPtr , array2 : CPtr , array3 : CPtr , array4 : CPtr , size : i32 ):
23+ def sum_arrays (array1 : CPtr , array2 : CPtr , array3 : CPtr , array4 : CPtr , \
24+ array5 : CPtr , array6 : CPtr , array7 : CPtr , array8 : CPtr , size : i32 ):
1625 iarray1 : Pointer [i8 [:]] = c_p_pointer (array1 , i8 [:], array ([size ]))
1726 iarray2 : Pointer [i16 [:]] = c_p_pointer (array2 , i16 [:], array ([size ]))
1827 iarray3 : Pointer [i32 [:]] = c_p_pointer (array3 , i32 [:], array ([size ]))
1928 iarray4 : Pointer [i64 [:]] = c_p_pointer (array4 , i64 [:], array ([size ]))
29+ iarray5 : Pointer [u8 [:]] = c_p_pointer (array5 , u8 [:], array ([size ]))
30+ iarray6 : Pointer [u16 [:]] = c_p_pointer (array6 , u16 [:], array ([size ]))
31+ iarray7 : Pointer [u32 [:]] = c_p_pointer (array7 , u32 [:], array ([size ]))
32+ iarray8 : Pointer [u64 [:]] = c_p_pointer (array8 , u64 [:], array ([size ]))
2033 sum_array_cptr : CPtr = _lfortran_malloc (size * i32 (sizeof (i64 )))
2134 sum_array : Pointer [i64 [:]] = c_p_pointer (sum_array_cptr , i64 [:], array ([size ]))
2235 i : i32
@@ -26,20 +39,30 @@ def sum_arrays(array1: CPtr, array2: CPtr, array3: CPtr, array4: CPtr, size: i32
2639 iarray2 [i ] = i16 (2 * i )
2740 iarray3 [i ] = i32 (3 * i )
2841 iarray4 [i ] = i64 (4 * i )
42+ iarray5 [i ] = u8 (i )
43+ iarray6 [i ] = u16 (6 * i )
44+ iarray7 [i ] = u32 (7 * i )
45+ iarray8 [i ] = u64 (8 * i )
2946
3047 for i in range (size ):
31- sum_array [i ] = i64 (iarray1 [i ]) + i64 (iarray2 [i ]) + i64 (iarray3 [i ]) + iarray4 [i ]
48+ sum_array [i ] = i64 (iarray1 [i ]) + i64 (iarray2 [i ]) + i64 (iarray3 [i ]) \
49+ + iarray4 [i ] + i64 (iarray5 [i ]) + i64 (iarray6 [i ]) \
50+ + i64 (iarray7 [i ]) + i64 (iarray8 [i ])
3251
3352 for i in range (size ):
3453 print (i , sum_array [i ])
35- assert sum_array [i ] == i64 (10 * i )
54+ assert sum_array [i ] == i64 (32 * i )
3655
3756def test_tuple_return ():
3857 a : CPtr = empty_c_void_p ()
3958 b : CPtr = empty_c_void_p ()
4059 c : CPtr = empty_c_void_p ()
4160 d : CPtr = empty_c_void_p ()
42- a , b , c , d = allocate_memory (50 )
43- sum_arrays (a , b , c , d , 50 )
61+ e : CPtr = empty_c_void_p ()
62+ f : CPtr = empty_c_void_p ()
63+ g : CPtr = empty_c_void_p ()
64+ h : CPtr = empty_c_void_p ()
65+ a , b , c , d , e , f , g , h = allocate_memory (50 )
66+ sum_arrays (a , b , c , d , e , f , g , h , 50 )
4467
4568test_tuple_return ()
0 commit comments