-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: Add cast-exp tests for other variable types
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
Showing
4 changed files
with
430 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} |
Oops, something went wrong.