github.com/Konstantin8105/c4go@v0.0.0-20240505174241-768bb1c65a51/tests/ap.c (about) 1 #include "tests.h" 2 #include <stdio.h> 3 4 // input argument - C-pointer 5 void a(int* v1) { printf("a: %d\n", *v1); } 6 7 // input argument - C-array 8 void b(int v1[], int size) 9 { 10 for (size--; size >= 0; size--) { 11 printf("b: %d %d\n", size, v1[size]); 12 } 13 } 14 15 long get() 16 { 17 return (long)(0); 18 } 19 20 long negative() 21 { 22 return (long)(-1); 23 } 24 25 double global; 26 27 double* get_value() 28 { 29 return &global; 30 } 31 32 int main() 33 { 34 plan(4); 35 36 diag("value"); 37 int i1 = 42; 38 a(&i1); 39 b(&i1, 1); 40 41 diag("C-array"); 42 int i2[] = { 11, 22 }; 43 a(i2); 44 b(i2, 2); 45 46 diag("C-pointer from value"); 47 int* i3 = &i1; 48 a(i3); 49 b(i3, 1); 50 51 diag("C-pointer from array"); 52 int* i4 = i2; 53 a(i4); 54 b(i4, 2); 55 56 diag("C-pointer from array"); 57 int* i5 = &i2[1]; 58 a(i5); 59 b(i5, 1); 60 61 diag("pointer arithmetic 1"); 62 i5 = &i2[0]; 63 int* i6 = i5 + 1; 64 a(i6); 65 b(i6, 1); 66 67 diag("pointer arithmetic 2"); 68 int val = 2 - 2; 69 int* i7 = 1 + (1 - 1) + val + 0 * (100 - 2) + i5 + 0 - 0 * 0; 70 a(i7); 71 b(i7, 1); 72 73 diag("pointer arithmetic 3"); 74 int* i8 = i5 + 1 + 0; 75 a(i8); 76 b(i8, 1); 77 78 diag("pointer arithmetic 4"); 79 int i9[] = { *i3, *(i3 + 1) }; 80 a(i9); 81 b(i9, 1); 82 83 diag("pointer arithmetic 5"); 84 int* i10 = 1 + 0 + i5 + 5 * get() + get() + (12 + 3) * get(); 85 a(i10); 86 b(i10, 1); 87 88 diag("pointer arithmetic 6"); 89 int* i11 = 1 + 0 + i5 + 5 * get() + get() - (12 + 3) * get(); 90 a(i11); 91 b(i11, 1); 92 93 diag("pointer from function"); 94 global = 42; 95 double* i12 = get_value(); 96 is_eq(*i12, global); 97 98 diag("pointer for some type"); 99 typedef int NUMBER; 100 typedef int* POINTER; 101 NUMBER num; 102 POINTER pnt; 103 int num_value = 56; 104 num = num_value; 105 pnt = # 106 is_eq(*pnt, num_value); 107 *pnt = 123; 108 is_eq(*pnt, 123); 109 is_eq(num, 123); 110 111 // TODO: test for negative index 112 // diag("pointer arithmetic 7"); 113 // int* tmp_i2 = i2 + 1; 114 // int* i13 = tmp_i2 + negative(); 115 // a(i13); 116 // b(i13, 1); 117 118 done_testing(); 119 }