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
3
6
4
7
@ccall
5
8
def _lfortran_malloc (size : i32 ) -> CPtr :
6
9
pass
7
10
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 ]:
9
13
array1 : CPtr = _lfortran_malloc (size * i32 (sizeof (i8 )))
10
14
array2 : CPtr = _lfortran_malloc (size * i32 (sizeof (i16 )))
11
15
array3 : CPtr = _lfortran_malloc (size * i32 (sizeof (i32 )))
12
16
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
14
22
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 ):
16
25
iarray1 : Pointer [i8 [:]] = c_p_pointer (array1 , i8 [:], array ([size ]))
17
26
iarray2 : Pointer [i16 [:]] = c_p_pointer (array2 , i16 [:], array ([size ]))
18
27
iarray3 : Pointer [i32 [:]] = c_p_pointer (array3 , i32 [:], array ([size ]))
19
28
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 ]))
20
33
sum_array_cptr : CPtr = _lfortran_malloc (size * i32 (sizeof (i64 )))
21
34
sum_array : Pointer [i64 [:]] = c_p_pointer (sum_array_cptr , i64 [:], array ([size ]))
22
35
i : i32
@@ -26,20 +39,30 @@ def sum_arrays(array1: CPtr, array2: CPtr, array3: CPtr, array4: CPtr, size: i32
26
39
iarray2 [i ] = i16 (2 * i )
27
40
iarray3 [i ] = i32 (3 * i )
28
41
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 )
29
46
30
47
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 ])
32
51
33
52
for i in range (size ):
34
53
print (i , sum_array [i ])
35
- assert sum_array [i ] == i64 (10 * i )
54
+ assert sum_array [i ] == i64 (32 * i )
36
55
37
56
def test_tuple_return ():
38
57
a : CPtr = empty_c_void_p ()
39
58
b : CPtr = empty_c_void_p ()
40
59
c : CPtr = empty_c_void_p ()
41
60
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 )
44
67
45
68
test_tuple_return ()
0 commit comments