mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
TypeInfo gained a span. Hex lexing fixed. Basic block returns fixed. Removal of Ast.exit. Enum parameter list parses. Enum analysis improved. Exit deduction improved. Switch over a bool allowed. Switch analysis improved. Added -% operator. Updated implicit casts. Use of bigint. Signed-unsigned comparisons.
This commit is contained in:
178
resources/testfragments/comparisons.c3
Normal file
178
resources/testfragments/comparisons.c3
Normal file
@@ -0,0 +1,178 @@
|
||||
module comparisons;
|
||||
|
||||
func void test_signed()
|
||||
{
|
||||
int a = 0;
|
||||
int b = 1;
|
||||
|
||||
bool ab_gt = a > b;
|
||||
bool ab_ge = a >= b;
|
||||
bool ab_le = a <= b;
|
||||
bool ab_lt = a < b;
|
||||
bool ab_ne = a != b;
|
||||
bool ab_eq = a == b;
|
||||
|
||||
}
|
||||
|
||||
func void test_unsigned()
|
||||
{
|
||||
uint a = 0;
|
||||
uint b = 1;
|
||||
|
||||
bool ab_gt = a > b;
|
||||
bool ab_ge = a >= b;
|
||||
bool ab_le = a <= b;
|
||||
bool ab_lt = a < b;
|
||||
bool ab_ne = a != b;
|
||||
bool ab_eq = a == b;
|
||||
|
||||
}
|
||||
|
||||
extern func void printf(char *s);
|
||||
|
||||
func void test_signedunsigned()
|
||||
{
|
||||
char a = 0 - 1;
|
||||
byte b = cast(a, byte);
|
||||
|
||||
printf("Signed-unsigned -1 0xFF \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
a = 1;
|
||||
b = 1;
|
||||
|
||||
printf("Signed-unsigned 1 1 \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
a = 1;
|
||||
b = 4;
|
||||
|
||||
printf("Signed-unsigned 1 4 \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
a = 4;
|
||||
b = 1;
|
||||
|
||||
printf("Signed-unsigned 4 1 \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
a = 4;
|
||||
b = 129;
|
||||
|
||||
printf("Signed-unsigned 4 129 \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
a = 0 - 4;
|
||||
b = 129;
|
||||
|
||||
printf("Signed-unsigned -4 129 \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
}
|
||||
|
||||
func void test_unsignedsigned()
|
||||
{
|
||||
int b = -1;
|
||||
uint a = cast(b, uint);
|
||||
|
||||
printf("Unsigned-signed 0xFFFFFFFF -1 \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
a = 1;
|
||||
b = 1;
|
||||
|
||||
printf("Unsigned-signed 1 1 \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
a = 4;
|
||||
b = 1;
|
||||
|
||||
printf("Unsigned-signed 4 1 \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
a = 1;
|
||||
b = 4;
|
||||
|
||||
printf("Unsigned-signed 1 4 \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
a = 0x8000_0001;
|
||||
b = 4;
|
||||
|
||||
printf("Unsigned-signed 0x8000_0001 4 \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
b = 0 - 4;
|
||||
a = 0x8000_0001;
|
||||
|
||||
printf("Unsigned-signed 0x8000_0001 -4 \n");
|
||||
if (a > b) printf("a > b\n");
|
||||
if (a >= b) printf("a >= b\n");
|
||||
if (a < b) printf("a < b\n");
|
||||
if (a <= b) printf("a <= b\n");
|
||||
if (a != b) printf("a != b\n");
|
||||
if (a == b) printf("a == b\n");
|
||||
|
||||
}
|
||||
|
||||
func void main()
|
||||
{
|
||||
test_signedunsigned();
|
||||
test_unsignedsigned();
|
||||
printf("-- Done ---\n");
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
module helloworld;
|
||||
|
||||
func void printf(char *str);
|
||||
extern func void printf(char *str);
|
||||
|
||||
func void main()
|
||||
{
|
||||
|
||||
@@ -38,6 +38,87 @@ struct Teob
|
||||
int oekfeo;
|
||||
}
|
||||
|
||||
enum EnumTest : long
|
||||
{
|
||||
VALUE1 = 4,
|
||||
VALUE2
|
||||
}
|
||||
|
||||
enum EnumTestDefault
|
||||
{
|
||||
VALUE,
|
||||
VALUE2
|
||||
}
|
||||
|
||||
enum EnumTestNoOverflowAfterLong : long
|
||||
{
|
||||
VALUE = 0x7FFF_FFFF_FFFF_FFFE,
|
||||
VALUE_NO_EXCEED
|
||||
}
|
||||
|
||||
enum EnumTestSmall : ushort
|
||||
{
|
||||
VALUE = 0xFF,
|
||||
VALUE2 = 0xFFFF
|
||||
}
|
||||
|
||||
enum EnumWithData : ushort (int a, char[] x, long b = 4)
|
||||
{
|
||||
// Currently the args are ignored TODO!
|
||||
TEST1(42, "hello", 328) = 3,
|
||||
TEST2(12, "world")
|
||||
}
|
||||
|
||||
|
||||
/* ERRORS
|
||||
|
||||
enum EnumWithErrorData : int (int
|
||||
{
|
||||
TEST
|
||||
}
|
||||
|
||||
enum EnumWithErrorWithMissingName : int (int)
|
||||
{
|
||||
TEST
|
||||
}
|
||||
|
||||
enum EnumTestNoOverflowAfterULong : ulong
|
||||
{
|
||||
VALUE = 0xFFFF_FFFF_FFFF_FFFE,
|
||||
VALUE_NO_EXCEED
|
||||
}
|
||||
|
||||
enum EnumTestOverflow
|
||||
{
|
||||
VALUE = 0x80000000,
|
||||
}
|
||||
|
||||
|
||||
enum EnumTestOverflowAfter
|
||||
{
|
||||
VALUE = 0x80000000 - 1,
|
||||
VALUE_EXCEED
|
||||
}
|
||||
|
||||
enum EnumTestOverflowAfterLong : long
|
||||
{
|
||||
VALUE = 0x7FFF_FFFF_FFFF_FFFF,
|
||||
VALUE_EXCEED
|
||||
}
|
||||
|
||||
enum EnumTestOverflowAfterULong : ulong
|
||||
{
|
||||
VALUE = 0xFFFF_FFFF_FFFF_FFFF,
|
||||
VALUE_EXCEED
|
||||
}
|
||||
|
||||
enum EnumTestErrorType : float
|
||||
{
|
||||
VALUE_BOOM
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
error Error
|
||||
{
|
||||
BLURB,
|
||||
@@ -60,6 +141,71 @@ func int borok() throws
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
func void testNoReturn()
|
||||
{
|
||||
int i = 0;
|
||||
}
|
||||
|
||||
func int testReturn()
|
||||
{
|
||||
int i = 0;
|
||||
return i;
|
||||
}
|
||||
|
||||
func int testReturnWithOtherAtEnd()
|
||||
{
|
||||
int i = 0;
|
||||
return i;
|
||||
if (i == 10) i++;
|
||||
i = i + 2;
|
||||
}
|
||||
|
||||
func int testReturnWithError() throws Error
|
||||
{
|
||||
int i = 0;
|
||||
throw Error.NO_SUCH_FILE;
|
||||
i = i + 1;
|
||||
}
|
||||
|
||||
func int testReturnWithConditional()
|
||||
{
|
||||
int i = 0;
|
||||
if (i > 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
func int testReturnWithCondThrow() throws Error
|
||||
{
|
||||
int i = 0;
|
||||
if (i > 0)
|
||||
{
|
||||
throw Error.NO_SUCH_FILE;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw Error.NO_SUCH_FILE;
|
||||
}
|
||||
}
|
||||
|
||||
func int testReturnSwitch()
|
||||
{
|
||||
int i = 0;
|
||||
switch (i)
|
||||
{
|
||||
case 1:
|
||||
return 2;
|
||||
case 2:
|
||||
return 3;
|
||||
default:
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
|
||||
func int barok() throws Error, OtherError
|
||||
{
|
||||
@@ -281,6 +427,7 @@ func int main(int x)
|
||||
{
|
||||
int efd = 9;
|
||||
int okfe = 1;
|
||||
return 1;
|
||||
switch (int bobe = okfe > 0 ? 1 : 0)
|
||||
{
|
||||
case 0:
|
||||
@@ -304,7 +451,6 @@ func int main(int x)
|
||||
printf("default\n");
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
int aa = x++;
|
||||
int bb = x--;
|
||||
int cc = ++x;
|
||||
@@ -377,6 +523,7 @@ int i = 0;
|
||||
EX:
|
||||
printf("EX\n");
|
||||
goto YEF;
|
||||
return 1;
|
||||
}
|
||||
|
||||
func void test2(int* x, int y, int z)
|
||||
|
||||
Reference in New Issue
Block a user