* fixed GCC 4.4.0 mingw compilation:
[fw/sdcc] / src / regression / pointer1.c
index 7b0cbc2ea5a11a84672fbe26cc2d270b1bece5b9..23075b42074f67cf3b426c2a6a209b9da03557fb 100644 (file)
-//#include "p16c84.h"
+#include "gpsim_assert.h"
+
 // Pointer tests
 
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
+unsigned char failures = 0;
+unsigned char dummy;
 
-bit bit0 = 0;
 unsigned int aint0 = 0;
 unsigned int aint1 = 0;
 unsigned char achar0 = 0;
 unsigned char achar1 = 0;
 unsigned char *acharP = 0;
 
-void done()
+unsigned char buff[10];
+
+void
+done()
+{
+  ASSERT(MANGLE(failures) == 0);
+  PASSED();
+}
+
+void
+f1 (unsigned char *ucP)
 {
 
-  dummy++;
+  if (ucP == 0)
+    {
+      failures++;
+      return;
+    }
 
+  if (*ucP)
+    failures++;
 }
 
-void f1(unsigned char *ucP)
+void
+f2 (unsigned int *uiP)
 {
 
-  if(ucP==0) {
+  if (uiP == 0)
+    {
+      failures++;
+      return;
+    }
+
+  if (*uiP)
     failures++;
-    return;
-  }
 
-   if(*ucP)
-      failures++;
 }
 
-void f2(unsigned int *uiP)
+
+unsigned char *
+f3 (void)
 {
 
-  if(uiP==0) {
+  return &achar0;
+}
+
+
+void f4(unsigned char *ucP, unsigned char uc)
+{
+
+  if(!ucP) {
     failures++;
     return;
   }
 
-  if(*uiP)
+  if(*ucP != uc)
     failures++;
 
 }
 
-unsigned char *f3(void)
+void init_array(char start_value)
 {
+  unsigned char c;
+
+  for(c=0; c<sizeof(buff); c++)
+    buff[c] = start_value++;
 
-  return &achar0;
 }
 
-void main(void)
+void check_array(char base_value)
 {
-  f1(&achar0);
-  f2(&aint0);
+  unsigned char c;
 
-  acharP = f3();
-  if( (acharP == 0) || (*acharP))
+  for(c=0; c<sizeof(buff); c++)
+    if(buff[c] != (base_value+c))
       failures++;
 
-  success = failures;
-  done();
+}
+
+void index_by_pointer(unsigned char *index, unsigned char expected_value)
+{
+  if(buff[*index] != expected_value)
+    failures++;
+}
+
+
+void
+main (void)
+{
+
+  init_array(4);
+  check_array(4);
+
+  if(buff[achar0 + 7] != 4+7)
+    failures++;
+
+  dummy = buff[achar0];
+
+  if(dummy != 4)
+    failures++;
+
+  if(dummy != (buff[achar0+1] -1)) 
+    failures++;
+
+  index_by_pointer(&dummy, 8);
+
+  f1 (&achar0);
+  f2 (&aint0);
+
+  acharP = f3 ();
+  if ((acharP == 0) || (*acharP))
+    failures++;
+  achar0 = 42;
+  if(*acharP != 42)
+    failures++;
+
+  achar0 = 5;
+  f4(&achar0, achar0);
+
+  done ();
 }