* src/SDCCglue.c (tempfileandname): changed un*x tmp search paths to /tmp and /var...
[fw/sdcc] / support / regression / tests / onebyte.c
index 1dffcc0feadff7739eb2cfd6106fedc6f3d30824..d0cc08d765dbc4eb724806b9c88917078d21ee44 100644 (file)
@@ -8,6 +8,7 @@
 void
 testMul(void)
 {
+#ifndef SDCC_pic16  /* bug [ 1444425 ] onebyte.c regression tes fails on pic16 */
   {attrL}            char  cL;
   {attrL}  unsigned  char ucL;
   {attrR}            char  cR;
@@ -35,6 +36,7 @@ testMul(void)
   ucL = 128;  cR =   1; ur8 = ucL * cR;  ur8b  = cR * ucL; ASSERT(ur8 ==  128); ASSERT(ur8b  ==  128);
   ucL = 128; ucR =   5; r16 = ucL * ucR; r16b = ucR * ucL; ASSERT(r16 ==  640); ASSERT(r16b ==  640);
   ucL = 128; ucR =   1; ur8 = ucL * ucR; ur8b = ucR * ucL; ASSERT(ur8 ==  128); ASSERT(ur8b ==  128);
+#endif
 }
 
 void
@@ -169,3 +171,88 @@ testAnd(void)
   ucL = 0x80;  cR = 0x80; r16 = ucL &  cR; r16b =  cR & ucL; ASSERT(r16 ==           0x80); ASSERT(r16b ==           0x80);
   ucL = 0x80; ucR = 0x80; r16 = ucL & ucR; r16b = ucR & ucL; ASSERT(r16 ==           0x80); ASSERT(r16b ==           0x80);
 }
+
+void
+testComplement(void)
+{
+  {attrR}           char  c;
+  {attrR}  unsigned char uc;
+  volatile         short r16;
+
+   c = 0x00;  r16 = ~ c; ASSERT(r16    == (short) 0xffff); ASSERT(  ~ c < 0);
+  uc = 0x00;  r16 = ~uc; ASSERT(r16    == (short) 0xffff); ASSERT(  ~uc < 0);
+  ASSERT(~ (char)          0x00 == (short) 0xffff); ASSERT(~ (char)          0x00 < 0);
+  ASSERT(~ (unsigned char) 0x00 == (short) 0xffff); ASSERT(~ (unsigned char) 0x00 < 0);
+   c = 0x80;  r16 = ~ c; ASSERT(r16 == (short) 0x007f); ASSERT(~ c > 0);
+  uc = 0x80;  r16 = ~uc; ASSERT(r16 == (short) 0xff7f); ASSERT(~uc < 0);
+  ASSERT(~ (char)          0x80 == (short) 0x007f); ASSERT(~ (char)          0x80 > 0);
+  ASSERT(~ (unsigned char) 0x80 == (short) 0xff7f); ASSERT(~ (unsigned char) 0x80 < 0);
+
+  ASSERT(~ 1   < 0);
+  ASSERT(~ 1u  > 0);
+  ASSERT(~ 1l  < 0);
+  ASSERT(~ 1ul > 0);
+}
+
+void
+testCompare(void)
+{
+  {attrL}   signed char  c;
+  {attrR} unsigned char uc;
+
+   c = 0x80; /* -128 */
+  uc = 0x80; /* +128 */
+
+  ASSERT(!(c == uc));
+  ASSERT(  c != uc );
+  ASSERT(  c <  uc );
+  ASSERT(  c <= uc );
+  ASSERT(!(c >  uc));
+  ASSERT(!(c >= uc));
+}
+
+void
+testUMinus(void)
+{
+    signed char  {attrL} sc;
+  unsigned char  {attrL} uc;
+    signed int   {attrL} si;
+  unsigned int   {attrL} ui;
+    signed long  {attrL} sl;
+  unsigned long  {attrL} ul;
+
+  ASSERT(-(53l ) < 0);
+  ASSERT(-(53ul) > 0);
+  ul = 53;
+  ASSERT(-ul > 0);
+  sl = 53;
+  ASSERT(-sl < 0);
+
+  ASSERT(-(53  ) < 0);
+  ASSERT(-(53u ) > 0);
+  ui = 53;
+  ASSERT(-ui > 0);
+  si = 53;
+  ASSERT(-si < 0);
+
+  ASSERT(-( 250 ) == -250);
+  uc = 250;
+  ASSERT(-uc == -250);
+
+  ASSERT(-(-128 ) ==  128);
+  sc = -128;
+  ASSERT(-sc == 128);
+}
+
+void
+testBug1571231(void)
+{
+  unsigned char  {attrL} uc;
+
+  /* bug-1571231 */
+  uc = 0x80;
+  if (uc + 0x80)
+    ASSERT(1);
+  else
+    ASSERT(0);
+}