Skip to content

Commit

Permalink
test: Add cast-exp tests for other variable types
Browse files Browse the repository at this point in the history
Add corresponding tests for non-global variables.  This is perhaps
overkill:  these tests check behavior on a code path that is shared
by multiple variable types.

Signed-off-by: Eugene Loh <eugene.loh@oracle.com>
Reviewed-by: Nick Alcock <nick.alcock@oracle.com>
Reviewed-by: Kris Van Hees <kris.van.hees@oracle.com>
  • Loading branch information
euloh authored and kvanhees committed May 25, 2023
1 parent 563d3c5 commit 6589fed
Show file tree
Hide file tree
Showing 4 changed files with 430 additions and 0 deletions.
140 changes: 140 additions & 0 deletions test/unittest/arithmetic/tst.cast-exp-assoc.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
/*
* Oracle Linux DTrace.
* Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved.
* Licensed under the Universal Permissive License v 1.0 as shown at
* http://oss.oracle.com/licenses/upl.
*/

/*
* ASSERTION: Integers are typecast correctly (explicit)
* when using associative arrays.
*
* SECTION: Types, Operators, and Expressions/Arithmetic Operators
*/
/* @@runtest-opts: -qC */

signed char c[int], c0[int];
short s[int], s0[int];
int i[int], i0[int];
long long l[int], l0[int];
unsigned char C[int], C0[int];
unsigned short S[int], S0[int];
unsigned int I[int], I0[int];
unsigned long long L[int], L0[int];

#define FMT "%d %d %d %d %d %d %d %d\n"

#define TEST(x) \
c[0] = (signed char)(x); \
s[0] = (short)(x); \
i[0] = (int)(x); \
l[0] = (long long)(x); \
C[0] = (unsigned char)(x); \
S[0] = (unsigned short)(x); \
I[0] = (unsigned int)(x); \
L[0] = (unsigned long long)(x); \
printf(FMT, c[0], s[0], i[0], l[0], C[0], S[0], I[0], L[0])

BEGIN
{
/* from scalar */
TEST(-2);
TEST(0xfffffffffffffffe);
TEST(0xfffffffe);
TEST(0xfffe);
TEST(0xfe);
TEST(2);
TEST(0x55);
TEST(0x5555);
TEST(0x55555555);
TEST(0x5555555555555555);

/* from signed char */
c0[0] = -2; TEST(c0[0]);
c0[0] = 0xfe; TEST(c0[0]);
c0[0] = 2; TEST(c0[0]);
c0[0] = 0x55; TEST(c0[0]);

/* from short */
s0[0] = -2; TEST(s0[0]);
s0[0] = 0xfffe; TEST(s0[0]);
s0[0] = 2; TEST(s0[0]);
s0[0] = 0x5555; TEST(s0[0]);

/* from int */
i0[0] = -2; TEST(i0[0]);
i0[0] = 0xfffffffe; TEST(i0[0]);
i0[0] = 2; TEST(i0[0]);
i0[0] = 0x55555555; TEST(i0[0]);

/* from long long */
l0[0] = -2; TEST(l0[0]);
l0[0] = 0xfffffffffffffffe; TEST(l0[0]);
l0[0] = 2; TEST(l0[0]);
l0[0] = 0x5555555555555555; TEST(l0[0]);

/* from unsigned char */
C0[0] = -2; TEST(C0[0]);
C0[0] = 0xfe; TEST(C0[0]);
C0[0] = 2; TEST(C0[0]);
C0[0] = 0x55; TEST(C0[0]);

/* from unsigned short */
S0[0] = -2; TEST(S0[0]);
S0[0] = 0xfffe; TEST(S0[0]);
S0[0] = 2; TEST(S0[0]);
S0[0] = 0x5555; TEST(S0[0]);

/* from unsigned int */
I0[0] = -2; TEST(I0[0]);
I0[0] = 0xfffffffe; TEST(I0[0]);
I0[0] = 2; TEST(I0[0]);
I0[0] = 0x55555555; TEST(I0[0]);

/* from unsigned long long */
L0[0] = -2; TEST(L0[0]);
L0[0] = 0xfffffffffffffffe; TEST(L0[0]);
L0[0] = 2; TEST(L0[0]);
L0[0] = 0x5555555555555555; TEST(L0[0]);

/* from other constant expressions */
TEST((signed char)(-1));
TEST((short)(-1));
TEST((int)(-1));
TEST((long long)(-1));
TEST((unsigned char)(-1));
TEST((unsigned short)(-1));
TEST((unsigned int)(-1));
TEST((unsigned long long)(-1));

TEST((long long)(signed char)(-1));
TEST((long long)(short)(-1));
TEST((long long)(int)(-1));
TEST((long long)(long long)(-1));
TEST((long long)(unsigned char)(-1));
TEST((long long)(unsigned short)(-1));
TEST((long long)(unsigned int)(-1));
TEST((long long)(unsigned long long)(-1));

/* from other expressions */
l0[0] = -1;
TEST((signed char)l0[0]);
TEST((short)l0[0]);
TEST((int)l0[0]);
TEST((long long)l0[0]);
TEST((unsigned char)l0[0]);
TEST((unsigned short)l0[0]);
TEST((unsigned int)l0[0]);
TEST((unsigned long long)l0[0]);

TEST((long long)(signed char)l0[0]);
TEST((long long)(short)l0[0]);
TEST((long long)(int)l0[0]);
TEST((long long)(long long)l0[0]);
TEST((long long)(unsigned char)l0[0]);
TEST((long long)(unsigned short)l0[0]);
TEST((long long)(unsigned int)l0[0]);
TEST((long long)(unsigned long long)l0[0]);

exit (0);
}
75 changes: 75 additions & 0 deletions test/unittest/arithmetic/tst.cast-exp-assoc.r
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
-2 -2 -2 4294967294 254 65534 4294967294 4294967294
-2 -2 65534 65534 254 65534 65534 65534
-2 254 254 254 254 254 254 254
2 2 2 2 2 2 2 2
85 85 85 85 85 85 85 85
85 21845 21845 21845 85 21845 21845 21845
85 21845 1431655765 1431655765 85 21845 1431655765 1431655765
85 21845 1431655765 6148914691236517205 85 21845 1431655765 6148914691236517205
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
2 2 2 2 2 2 2 2
85 85 85 85 85 85 85 85
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
2 2 2 2 2 2 2 2
85 21845 21845 21845 85 21845 21845 21845
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
2 2 2 2 2 2 2 2
85 21845 1431655765 1431655765 85 21845 1431655765 1431655765
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
2 2 2 2 2 2 2 2
85 21845 1431655765 6148914691236517205 85 21845 1431655765 6148914691236517205
-2 254 254 254 254 254 254 254
-2 254 254 254 254 254 254 254
2 2 2 2 2 2 2 2
85 85 85 85 85 85 85 85
-2 -2 65534 65534 254 65534 65534 65534
-2 -2 65534 65534 254 65534 65534 65534
2 2 2 2 2 2 2 2
85 21845 21845 21845 85 21845 21845 21845
-2 -2 -2 4294967294 254 65534 4294967294 4294967294
-2 -2 -2 4294967294 254 65534 4294967294 4294967294
2 2 2 2 2 2 2 2
85 21845 1431655765 1431655765 85 21845 1431655765 1431655765
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
-2 -2 -2 -2 254 65534 4294967294 18446744073709551614
2 2 2 2 2 2 2 2
85 21845 1431655765 6148914691236517205 85 21845 1431655765 6148914691236517205
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 255 255 255 255 255 255 255
-1 -1 65535 65535 255 65535 65535 65535
-1 -1 -1 4294967295 255 65535 4294967295 4294967295
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 255 255 255 255 255 255 255
-1 -1 65535 65535 255 65535 65535 65535
-1 -1 -1 4294967295 255 65535 4294967295 4294967295
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 255 255 255 255 255 255 255
-1 -1 65535 65535 255 65535 65535 65535
-1 -1 -1 4294967295 255 65535 4294967295 4294967295
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615
-1 255 255 255 255 255 255 255
-1 -1 65535 65535 255 65535 65535 65535
-1 -1 -1 4294967295 255 65535 4294967295 4294967295
-1 -1 -1 -1 255 65535 4294967295 18446744073709551615

140 changes: 140 additions & 0 deletions test/unittest/arithmetic/tst.cast-exp-tvar.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
/*
* Oracle Linux DTrace.
* Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved.
* Licensed under the Universal Permissive License v 1.0 as shown at
* http://oss.oracle.com/licenses/upl.
*/

/*
* ASSERTION: Integers are typecast correctly (explicit)
* when using thread-local variables.
*
* SECTION: Types, Operators, and Expressions/Arithmetic Operators
*/
/* @@runtest-opts: -qC */

self signed char c, c0;
self short s, s0;
self int i, i0;
self long long l, l0;
self unsigned char C, C0;
self unsigned short S, S0;
self unsigned int I, I0;
self unsigned long long L, L0;

#define FMT "%d %d %d %d %d %d %d %d\n"

#define TEST(x) \
self->c = (signed char)(x); \
self->s = (short)(x); \
self->i = (int)(x); \
self->l = (long long)(x); \
self->C = (unsigned char)(x); \
self->S = (unsigned short)(x); \
self->I = (unsigned int)(x); \
self->L = (unsigned long long)(x); \
printf(FMT, self->c, self->s, self->i, self->l, self->C, self->S, self->I, self->L)

BEGIN
{
/* from scalar */
TEST(-2);
TEST(0xfffffffffffffffe);
TEST(0xfffffffe);
TEST(0xfffe);
TEST(0xfe);
TEST(2);
TEST(0x55);
TEST(0x5555);
TEST(0x55555555);
TEST(0x5555555555555555);

/* from signed char */
self->c0 = -2; TEST(self->c0);
self->c0 = 0xfe; TEST(self->c0);
self->c0 = 2; TEST(self->c0);
self->c0 = 0x55; TEST(self->c0);

/* from short */
self->s0 = -2; TEST(self->s0);
self->s0 = 0xfffe; TEST(self->s0);
self->s0 = 2; TEST(self->s0);
self->s0 = 0x5555; TEST(self->s0);

/* from int */
self->i0 = -2; TEST(self->i0);
self->i0 = 0xfffffffe; TEST(self->i0);
self->i0 = 2; TEST(self->i0);
self->i0 = 0x55555555; TEST(self->i0);

/* from long long */
self->l0 = -2; TEST(self->l0);
self->l0 = 0xfffffffffffffffe; TEST(self->l0);
self->l0 = 2; TEST(self->l0);
self->l0 = 0x5555555555555555; TEST(self->l0);

/* from unsigned char */
self->C0 = -2; TEST(self->C0);
self->C0 = 0xfe; TEST(self->C0);
self->C0 = 2; TEST(self->C0);
self->C0 = 0x55; TEST(self->C0);

/* from unsigned short */
self->S0 = -2; TEST(self->S0);
self->S0 = 0xfffe; TEST(self->S0);
self->S0 = 2; TEST(self->S0);
self->S0 = 0x5555; TEST(self->S0);

/* from unsigned int */
self->I0 = -2; TEST(self->I0);
self->I0 = 0xfffffffe; TEST(self->I0);
self->I0 = 2; TEST(self->I0);
self->I0 = 0x55555555; TEST(self->I0);

/* from unsigned long long */
self->L0 = -2; TEST(self->L0);
self->L0 = 0xfffffffffffffffe; TEST(self->L0);
self->L0 = 2; TEST(self->L0);
self->L0 = 0x5555555555555555; TEST(self->L0);

/* from other constant expressions */
TEST((signed char)(-1));
TEST((short)(-1));
TEST((int)(-1));
TEST((long long)(-1));
TEST((unsigned char)(-1));
TEST((unsigned short)(-1));
TEST((unsigned int)(-1));
TEST((unsigned long long)(-1));

TEST((long long)(signed char)(-1));
TEST((long long)(short)(-1));
TEST((long long)(int)(-1));
TEST((long long)(long long)(-1));
TEST((long long)(unsigned char)(-1));
TEST((long long)(unsigned short)(-1));
TEST((long long)(unsigned int)(-1));
TEST((long long)(unsigned long long)(-1));

/* from other expressions */
self->l0 = -1;
TEST((signed char)self->l0);
TEST((short)self->l0);
TEST((int)self->l0);
TEST((long long)self->l0);
TEST((unsigned char)self->l0);
TEST((unsigned short)self->l0);
TEST((unsigned int)self->l0);
TEST((unsigned long long)self->l0);

TEST((long long)(signed char)self->l0);
TEST((long long)(short)self->l0);
TEST((long long)(int)self->l0);
TEST((long long)(long long)self->l0);
TEST((long long)(unsigned char)self->l0);
TEST((long long)(unsigned short)self->l0);
TEST((long long)(unsigned int)self->l0);
TEST((long long)(unsigned long long)self->l0);

exit (0);
}

0 comments on commit 6589fed

Please sign in to comment.