* tests\bug-221100.c, tests\shifts.c, tests\absolute.c:
[fw/sdcc] / support / regression / tests / shifts.c
index 60b6633246f79e460ff184d380f45f38f8b161ec..a975cdff060979b7d93aa57a4c7cc3ce872379aa 100644 (file)
@@ -1,7 +1,8 @@
 /** Tests covering the shift operators.
 
-    type: char, int
-    storage: static, 
+    sign: signed, unsigned
+    type: char, int, long
+    storage: static,
     attr: volatile
 
     vals: 3
 */
 #include <testfwk.h>
 
-static void
-testShiftClasses(void)
+void
+test1ShiftClasses(void)
 {
-    {attr} {storage} {type} i, result;
+    {attr} {storage} {sign} {type} i, result;
+
+    i = 30;
+    ASSERT(i>>3 == 3);
+    ASSERT(i<<2 == 120);
 
-    i = 50;
-    ASSERT(i>>3 == 6);
-    ASSERT(i<<2 == 200);
-    
     result = i;
     result >>= 2;
-    ASSERT(result == 12);
+    ASSERT(result == 7);
 
     result = i;
     result <<= 2;
-    ASSERT(result == 200);
+    ASSERT(result == 120);
 }
 
-/** PENDING: Disabled. */
-static void
-testShiftByteMultiples(void)
+void
+test2ShiftRight(void)
+{
+    {attr} {storage} {type} i, result;
+
+    i = -120;
+    ASSERT(i>>1 == -60);
+    ASSERT(i>>2 == -30);
+    ASSERT(i>>3 == -15);
+    ASSERT(i>>4 == -8);
+    ASSERT(i>>5 == -4);
+    ASSERT(i>>6 == -2);
+    ASSERT(i>>7 == -1);
+    ASSERT(i>>8 == -1);
+    result = i;
+    result >>= 3;
+    ASSERT(result == -15);
+}
+
+void
+test3ShiftByteMultiples(void)
 {
-#if 0
     {attr} {storage} {type} i;
 
     i = ({type}){vals};
-    ASSERT(i>>8  == (({type}){vals} >> 8));
-    ASSERT(i>>16 == (({type}){vals} >> 16));
-    ASSERT(i>>24 == (({type}){vals} >> 24));
+    ASSERT(i>>8  == ({type})({vals} >> 8));
+    ASSERT(i>>16 == ({type})({vals} >> 16));
+    ASSERT(i>>24 == ({type})({vals} >> 24));
 
     i = ({type}){vals};
-    ASSERT(i<<8 == (({type}){vals} << 8));
-    ASSERT(i<<16 == (({type}){vals} << 16));
-    ASSERT(i<<24 == (({type}){vals} << 24));
-#endif
+    ASSERT( ({type})(i<<8)  ==  ({type})({vals} << 8));;
+    ASSERT((({type}) i<<16) == (({type}) {vals} << 16));
+    ASSERT((({type}) i<<24) == (({type}) {vals} << 24));
 }
 
-static void
-testShiftOne(void)
+void
+test4ShiftOne(void)
 {
-    {attr} {storage} {type} i;
-    {type} result;
+    {attr} {storage} {sign} {type} i;
+    {sign} {type} result;
 
     i = ({type}){vals};
 
@@ -69,3 +86,24 @@ testShiftOne(void)
     result <<= 1;
     ASSERT(result == ({type})(({type}){vals} << 1));
 }
+
+static {type} ShiftLeftByParam ({type} count)
+{
+    {attr} {storage} {type} i;
+    i = ({type}){vals};
+    return (i << count);
+}
+
+static {type} ShiftRightByParam ({type} count)
+{
+    {attr} {storage} {type} i;
+    i = ({type}){vals};
+    return (i >> count);
+}
+
+void
+testShiftByParam(void)
+{
+    ASSERT(ShiftLeftByParam(2)  == ({type})({vals} << 2));
+    ASSERT(ShiftRightByParam(2) == ({type})({vals} >> 2));
+}