April 09, 2011 [dmd-internals] Test cases for D1-CTFE | ||||
---|---|---|---|---|
| ||||
The D1 test suite still isn't on git. These are the D1 tests I added to the bottom of interpret3.d. Only the last one is specific is D1. -------------- char[] bug1330StringIndex() { char [] blah = "foo".dup; assert(blah == "foo"); char [] s = blah[0..2]; blah[0] = 'h'; assert(s== "ho"); s[0] = 'm'; return blah; } static assert(bug1330StringIndex()=="moo"); static assert(bug1330StringIndex()=="moo"); // check we haven't clobbered any string literals int[] bug1330ArrayIndex() { int [] blah = [1,2,3]; int [] s = blah; s = blah[0..2]; int z = blah[0] = 6; assert(z==6); assert(blah[0]==6); assert(s[0]==6); assert(s== [6, 2]); s[1] = 4; assert(z==6); return blah; } static assert(bug1330ArrayIndex()==[6,4,3]); static assert(bug1330ArrayIndex()==[6,4,3]); // check we haven't clobbered any literals char[] bug1330StringSliceAssign() { char [] blah = "food".dup; assert(blah == "food"); char [] s = blah[1..4]; blah[0..2] = "hc"; assert(s== "cod"); s[0..2] = ['a', 'b']; // Mix string + array literal assert(blah == "habd"); s[0..2] = "mq"; return blah; } static assert(bug1330StringSliceAssign()=="hmqd"); static assert(bug1330StringSliceAssign()=="hmqd"); int[] bug1330ArraySliceAssign() { int [] blah = [1,2,3,4]; int [] s = blah[1..4]; blah[0..2] = [7, 9]; assert(s == [9,3,4]); s[0..2] = [8, 15]; return blah; } static assert(bug1330ArraySliceAssign()==[7, 8, 15, 4]); int[] bug1330ArrayBlockAssign() { int [] blah = [1,2,3,4,5]; int [] s = blah[1..4]; blah[0..2] = 17; assert(s == [17,3,4]); s[0..2] = 9; return blah; } static assert(bug1330ArrayBlockAssign()==[17, 9, 9, 4, 5]); char[] bug1330StringBlockAssign() { char [] blah = "abcde".dup; char [] s = blah[1..4]; blah[0..2] = 'x'; assert(s == "xcd"); s[0..2] = 'y'; return blah; } static assert(bug1330StringBlockAssign() == "xyyde"); int assignAA(int x) { int[int] aa; int[int] cc = aa; assert(cc.values.length==0); assert(cc.keys.length==0); aa[1] = 2; aa[x] = 6; int[int] bb = aa; assert(bb.keys.length==2); assert(cc.keys.length==0); // cc is not affected to aa, because it is null aa[500] = 65; assert(bb.keys.length==3); // but bb is affected by changes to aa return aa[1] + aa[x]; } static assert(assignAA(12) == 8); template Compileable(int z) { bool OK;} int arraybounds(int j, int k) { int [] xxx = [1, 2, 3, 4, 5]; int [] s = xxx[1..$]; s = s[j..k]; // slice of slice return s[$-1]; } int arraybounds2(int j, int k) { int [] xxx = [1, 2, 3, 4, 5]; int [] s = xxx[j..k]; // direct slice return 1; } static assert( !is(typeof(Compileable!(arraybounds(1, 14))))); static assert( !is(typeof(Compileable!(arraybounds(15, 3))))); static assert( arraybounds(2,4) == 5); static assert( !is(typeof(Compileable!(arraybounds2(1, 14))))); static assert( !is(typeof(Compileable!(arraybounds2(15, 3))))); static assert( arraybounds2(2,4) == 1); int bug5147a() { int[1][2] a = 37; return a[0][0]; } static assert(bug5147a()==37); int bug5147b() { int[4][2][3][17] a = 37; return a[0][0][0][0]; } static assert(bug5147b()==37); int setlen() { int[][] zzz; zzz.length = 2; zzz[0].length = 10; assert(zzz.length == 2); assert(zzz[0].length==10); assert(zzz[1].length==0); return 2; } static assert(setlen()==2); int ZZfoo() { const int [] ZZ = [ 1,2,3]; int [] q = ZZ; int [] w = ZZ; if (q[1]!=2) return 27; w[1] = 6; return q[2]; } static assert(ZZfoo()==3); static assert(ZZfoo()==3); |
April 09, 2011 [dmd-internals] Test cases for D1-CTFE | ||||
---|---|---|---|---|
| ||||
Posted in reply to Don Clugston |
On 4/8/2011 10:07 PM, Don Clugston wrote:
> The D1 test suite still isn't on git. These are the D1 tests I added to the bottom of interpret3.d. Only the last one is specific is D1.
>
Thanks, folded it in.
|
Copyright © 1999-2021 by the D Language Foundation