From b6cbea1d9bd03afbbb7a13d172ae255ce68ae2d9 Mon Sep 17 00:00:00 2001 From: "Gordon P. Hemsley" Date: Sat, 12 Oct 2024 12:54:22 -0400 Subject: [PATCH] WIP: operators tests --- tests/operators/Cargo.toml | 8 + tests/operators/build.rs | 7 + tests/operators/src/binary.c | 360 +++++++++++++++++++++++++++++ tests/operators/src/test_binary.rs | 129 +++++++++++ tests/operators/src/test_unary.rs | 63 +++++ tests/operators/src/unary.c | 116 ++++++++++ 6 files changed, 683 insertions(+) create mode 100644 tests/operators/Cargo.toml create mode 100644 tests/operators/build.rs create mode 100644 tests/operators/src/binary.c create mode 100644 tests/operators/src/test_binary.rs create mode 100644 tests/operators/src/test_unary.rs create mode 100644 tests/operators/src/unary.c diff --git a/tests/operators/Cargo.toml b/tests/operators/Cargo.toml new file mode 100644 index 0000000000..11c08518bc --- /dev/null +++ b/tests/operators/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "operators-tests" +version = "0.1.0" +edition = "2021" + +[dependencies] +f128 = "0.2" +libc = "0.2" diff --git a/tests/operators/build.rs b/tests/operators/build.rs new file mode 100644 index 0000000000..330c2e50b0 --- /dev/null +++ b/tests/operators/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); + + println!("cargo:rustc-link-search=native={}", manifest_dir); +} diff --git a/tests/operators/src/binary.c b/tests/operators/src/binary.c new file mode 100644 index 0000000000..5c4ac10ae0 --- /dev/null +++ b/tests/operators/src/binary.c @@ -0,0 +1,360 @@ +int binop_multiply_signed(int x, int y) { + return x * y; +} + +unsigned int binop_multiply_unsigned(unsigned int x, unsigned int y) { + return x * y; +} + +int binop_divide_signed(int x, int y) { + return x / y; +} + +unsigned int binop_divide_unsigned(unsigned int x, unsigned int y) { + return x / y; +} + +int binop_modulus_signed(int x, int y) { + return x % y; +} + +unsigned int binop_modulus_unsigned(unsigned int x, unsigned int y) { + return x % y; +} + +int binop_add_signed(int x, int y) { + return x + y; +} + +unsigned int binop_add_unsigned(unsigned int x, unsigned int y) { + return x + y; +} + +int binop_subtract_signed(int x, int y) { + return x - y; +} + +unsigned int binop_subtract_unsigned(unsigned int x, unsigned int y) { + return x - y; +} + +int binop_shiftleft_signed(int x, int y) { + return x << y; +} + +unsigned int binop_shiftleft_unsigned(unsigned int x, unsigned int y) { + return x << y; +} + +int binop_shiftright_signed(int x, int y) { + return x >> y; +} + +unsigned int binop_shiftright_unsigned(unsigned int x, unsigned int y) { + return x >> y; +} + +int binop_less_signed(int x, int y) { + return x < y; +} + +unsigned int binop_less_unsigned(unsigned int x, unsigned int y) { + return x < y; +} + +int binop_greater_signed(int x, int y) { + return x > y; +} + +unsigned int binop_greater_unsigned(unsigned int x, unsigned int y) { + return x > y; +} + +int binop_lessequal_signed(int x, int y) { + return x <= y; +} + +unsigned int binop_lessequal_unsigned(unsigned int x, unsigned int y) { + return x <= y; +} + +int binop_greaterequal_signed(int x, int y) { + return x >= y; +} + +unsigned int binop_greaterequal_unsigned(unsigned int x, unsigned int y) { + return x >= y; +} + +int binop_equalequal_signed(int x, int y) { + return x == y; +} + +unsigned int binop_equalequal_unsigned(unsigned int x, unsigned int y) { + return x == y; +} + +int binop_notequal_signed(int x, int y) { + return x != y; +} + +unsigned int binop_notequal_unsigned(unsigned int x, unsigned int y) { + return x != y; +} + +int binop_bitand_signed(int x, int y) { + return x & y; +} + +unsigned int binop_bitand_unsigned(unsigned int x, unsigned int y) { + return x & y; +} + +int binop_bitxor_signed(int x, int y) { + return x ^ y; +} + +unsigned int binop_bitxor_unsigned(unsigned int x, unsigned int y) { + return x ^ y; +} + +int binop_bitor_signed(int x, int y) { + return x | y; +} + +unsigned int binop_bitor_unsigned(unsigned int x, unsigned int y) { + return x | y; +} + +int binop_and_signed(int x, int y) { + return x && y; +} + +unsigned int binop_and_unsigned(unsigned int x, unsigned int y) { + return x && y; +} + +int binop_or_signed(int x, int y) { + return x || y; +} + +unsigned int binop_or_unsigned(unsigned int x, unsigned int y) { + return x || y; +} + + +int binop_assignadd_signed(int x, int y) { + return x += y; +} + +unsigned int binop_assignadd_unsigned(unsigned int x, unsigned int y) { + return x += y; +} + +int binop_assignsubtract_signed(int x, int y) { + return x -= y; +} + +unsigned int binop_assignsubtract_unsigned(unsigned int x, unsigned int y) { + return x -= y; +} + +int binop_assignmultiply_signed(int x, int y) { + return x *= y; +} + +unsigned int binop_assignmultiply_unsigned(unsigned int x, unsigned int y) { + return x *= y; +} + +int binop_assigndivide_signed(int x, int y) { + return x /= y; +} + +unsigned int binop_assigndivide_unsigned(unsigned int x, unsigned int y) { + return x /= y; +} + +int binop_assignmodulus_signed(int x, int y) { + return x %= y; +} + +unsigned int binop_assignmodulus_unsigned(unsigned int x, unsigned int y) { + return x %= y; +} + +int binop_assignbitxor_signed(int x, int y) { + return x ^= y; +} + +unsigned int binop_assignbitxor_unsigned(unsigned int x, unsigned int y) { + return x ^= y; +} + +int binop_assignshiftleft_signed(int x, int y) { + return x <<= y; +} + +unsigned int binop_assignshiftleft_unsigned(unsigned int x, unsigned int y) { + return x <<= y; +} + +int binop_assignshiftright_signed(int x, int y) { + return x >>= y; +} + +unsigned int binop_assignshiftright_unsigned(unsigned int x, unsigned int y) { + return x >>= y; +} + +int binop_assignbitor_signed(int x, int y) { + return x |= y; +} + +unsigned int binop_assignbitor_unsigned(unsigned int x, unsigned int y) { + return x |= y; +} + +int binop_assignbitand_signed(int x, int y) { + return x &= y; +} + +unsigned int binop_assignbitand_unsigned(unsigned int x, unsigned int y) { + return x &= y; +} + + +int binop_assign_signed(int x, int y) { + return x = y; +} + +unsigned int binop_assign_unsigned(unsigned int x, unsigned int y) { + return x = y; +} + +int binop_comma_signed(int x, int y) { + return x , y; +} + +unsigned int binop_comma_unsigned(unsigned int x, unsigned int y) { + return x , y; +} + + +void unused_binary(void) { + 1 + 1; + 1 - 1; + 1 && 1; + 1 || 1; +} + +long int _var_array(unsigned long int size) { + long int arr[size]; + return arr; +} + +void assignment(void) { + volatile int x = 0; + x = 1; + x += 2; + // volatile int x1 = x + 1000; + // volatile int x2 = x - 1000; + // volatile int x3 = x * x; + // volatile int x4 = x / x; + // volatile int x5 = x % x; + // volatile int x6 = x4 == x5; + // volatile int x7 = x4 != x5; + + unsigned int y = 0; + y += 3; + y -= 2; + // unsigned int y1 = y + 1000; + // unsigned int y2 = y - 1000; + // unsigned int y3 = y * y; + // unsigned int y4 = y / y; + // unsigned int y5 = y % y; + // unsigned int y6 = y4 == y5; + // unsigned int y7 = y4 != y5; + + float z = 0; + z *= x; + z /= y; + + // _Bool q = 1; + // q += 1; +} + +void pre_increment(void) { + // _Float16 h = 0.f16; + // ++h; + // _Float16 h2 = ++h; + + float f = 0.f; + ++f; + float f2 = ++f; + + double d = 0.; + ++d; + double d2 = ++d; + + long double ld = 0.l; + ++ld; + long double ld2 = ++ld; +} + +void post_increment(void) { + int i = 0; + i++; + int i2 = i++; + int i3 = i--; + i--; + + volatile int vi = 0; + vi++; + // XXX: https://github.com/immunant/c2rust/pull/1135 + // volatile int vi2 = vi++; + // volatile int vi3 = vi--; + vi--; + + unsigned int ui = 0u; + ui++; + unsigned int ui2 = ui++; + unsigned int ui3 = ui--; + ui--; + + // _Float16 h = 0.f16; + // h++; + // _Float16 h2 = h++; + // _Float16 h3 = h--; + // h--; + + float f = 0.f; + f++; + float f2 = f++; + float f3 = f--; + f--; + + double d = 0.; + d++; + double d2 = d++; + double d3 = d--; + d--; + + long double ld = 0.l; + ld++; + long double ld2 = ld++; + long double ld3 = ld--; + ld--; + + int *pi = i; + *pi++; + int *pi2 = *pi++; + int *pi3 = *pi--; + *pi--; + + int *v = _var_array(37); + *v++; + int v2 = *v++; + int v3 = *v--; + *v--; +} diff --git a/tests/operators/src/test_binary.rs b/tests/operators/src/test_binary.rs new file mode 100644 index 0000000000..fa9c9c5b1a --- /dev/null +++ b/tests/operators/src/test_binary.rs @@ -0,0 +1,129 @@ +use crate::binary::*; +use libc::*; + +#[link(name = "test")] +extern "C" { +} + +pub fn test_multiply() { + +} + +pub fn test_divide() { + +} + +pub fn test_modulus() { + +} + +pub fn test_add() { + +} + +pub fn test_subtract() { + +} + +pub fn test_shiftleft() { + +} + +pub fn test_shiftright() { + +} + +pub fn test_less() { + +} + +pub fn test_greater() { + +} + +pub fn test_lessequal() { + +} + +pub fn test_greaterequal() { + +} + +pub fn test_equalequal() { + +} + +pub fn test_notequal() { + +} + +pub fn test_bitand() { + +} + +pub fn test_bitxor() { + +} + +pub fn test_bitor() { + +} + +pub fn test_and() { + +} + +pub fn test_or() { + +} + + +pub fn test_assignadd() { + +} + +pub fn test_assignsubtract() { + +} + +pub fn test_assignmultiply() { + +} + +pub fn test_assigndivide() { + +} + +pub fn test_assignmodulus() { + +} + +pub fn test_assignbitxor() { + +} + +pub fn test_assignshiftleft() { + +} + +pub fn test_assignshiftright() { + +} + +pub fn test_assignbitor() { + +} + +pub fn test_assignbitand() { + +} + + +pub fn test_assign() { + +} + +pub fn test_comma() { + +} + diff --git a/tests/operators/src/test_unary.rs b/tests/operators/src/test_unary.rs new file mode 100644 index 0000000000..1a3e90321e --- /dev/null +++ b/tests/operators/src/test_unary.rs @@ -0,0 +1,63 @@ +use crate::unary::*; +use libc::*; + +#[link(name = "test")] +extern "C" { +} + +pub fn test_addressof() { + +} + +pub fn test_deref() { + +} + +pub fn test_plus() { + +} + +pub fn test_postincrement() { + +} + +pub fn test_preincrement() { + +} + +pub fn test_negate() { + +} + +pub fn test_postdecrement() { + +} + +pub fn test_predecrement() { + +} + +pub fn test_complement() { + +} + +pub fn test_not() { + +} + +pub fn test_real() { + +} + +pub fn test_imag() { + +} + +pub fn test_extension() { + +} + +pub fn test_coawait() { + +} + diff --git a/tests/operators/src/unary.c b/tests/operators/src/unary.c new file mode 100644 index 0000000000..a4ba8e7b7b --- /dev/null +++ b/tests/operators/src/unary.c @@ -0,0 +1,116 @@ +int* unop_addressof(int x) { + return &x; +} + +int unop_deref_int(int* x) { + return *x; +} + +// XXX: https://github.com/immunant/c2rust/pull/1135 +/* +int unop_deref_volatile(volatile int x) { + int* x2 = x++; + return *x2; +} +*/ + +// int unop_deref_volatile(int* x) { +// volatile const int x1 = &x; + + +// volatile const int x2 = x1; +// volatile int x3 = unop_deref_int(x2); +// int* x4 = x3; + +// return x4; +// } + +// int unop_deref_addressof(int x) { +// int* x1 = &x; +// int x2 = *x1; +// return x2; +// } + +typedef int int_to_int(int); +int unop_deref_function(int x) { + int_to_int* fn = &unop_deref_int; + + return (*fn)(x); +} + +// char unop_deref_array(char *x) { +// return *x; +// } + +int unop_plus(int x) { + return +x; +} + +int unop_postincrement(int x) { + return x++; +} + +int unop_preincrement(int x) { + return ++x; +} + +signed int unop_negate_signed_int(signed int x) { + return -x; +} + +unsigned int unop_negate_unsigned_int(unsigned int x) { + return -x; +} + +int unop_postdecrement(int x) { + return x--; +} + +int unop_predecrement(int x) { + return --x; +} + +int unop_complement(int x) { + return ~x; +} + +int unop_not(int x) { + return !x; +} + +/* +int unop_real(int x) { + return __real x; +} +*/ + +/* +int unop_imag(int x) { + return __imag x; +} +*/ + +int unop_extension(int x) { + return __extension__ x; +} + +/* +#ifdef co_await +int unop_coawait(int x) { + return co_await x; +} +#endif +*/ + +void unused_unary(void) { + -2; + +2; +} + +void something(void) { + int *x = (void*)0; + int *y = &*x; + int *z = *&y; + + const int *w = *&z; +}