Merge dmd upstream e2fe2687b
[official-gcc.git] / gcc / testsuite / gdc.test / runnable / test7.d
blobd3d4909f178820e9961b41635bbad5158b45a514
1 // PERMUTE_ARGS:
3 // Test memset style array assignments.
5 extern(C) int printf(const char*, ...);
7 /**************************************/
9 char[] b1;
11 char[] func1(int dim)
13 char[] a = new char[dim];
15 b1 = a;
16 return a;
19 void test1()
21 printf("test1()\n");
22 int i;
23 int j;
25 char[1] a1;
26 a1[] = 'x';
27 assert(a1[0] == 'x');
29 char[2] a2;
30 a2[] = 'x';
31 for (i = 0; i < a2.length; i++)
32 assert(a2[i] == 'x');
34 char[3] a3;
35 a3[] = 'x';
36 for (i = 0; i < a3.length; i++)
37 assert(a3[i] == 'x');
39 char[4] a4;
40 a4[] = 'x';
41 for (i = 0; i < a4.length; i++)
42 assert(a4[i] == 'x');
44 char[8] a8;
45 a8[] = 'x';
46 for (i = 0; i < a8.length; i++)
47 assert(a8[i] == 'x');
49 char[27] a27;
50 a27[] = 'x';
51 for (i = 0; i < a27.length; i++)
52 assert(a27[i] == 'x');
54 func1(33)[] = 'y';
55 for (i = 0; i < b1.length; i++)
56 assert(b1[i] == 'y');
59 char[23] a23 = 'x';
60 i = 16;
61 j = 18;
62 a23[i++..++j] = 'c';
63 printf("i = %d, j = %d\n", i, j);
64 assert(i == 17);
65 assert(j == 19);
66 assert(a23[15] == 'x');
67 assert(a23[16] == 'c');
68 assert(a23[17] == 'c');
69 assert(a23[18] == 'c');
70 assert(a23[19] == 'x');
71 assert(a23[20] == 'x');
74 /**************************************/
76 short[] b2;
78 short[] func2(int dim)
80 short[] a = new short[dim];
82 b2 = a;
83 return a;
86 void test2()
88 printf("test2()\n");
89 int i;
90 int j;
92 short[1] a1;
93 a1[] = 0x1234;
94 assert(a1[0] == 0x1234);
96 short[2] a2;
97 a2[] = 0x1234;
98 for (i = 0; i < a2.length; i++)
99 assert(a2[i] == 0x1234);
101 short[3] a3;
102 a3[] = 0x1234;
103 for (i = 0; i < a3.length; i++)
104 assert(a3[i] == 0x1234);
106 short[4] a4;
107 a4[] = 0x1234;
108 for (i = 0; i < a4.length; i++)
109 assert(a4[i] == 0x1234);
111 short[8] a8;
112 a8[] = 0x1234;
113 for (i = 0; i < a8.length; i++)
114 assert(a8[i] == 0x1234);
116 short[27] a27;
117 a27[] = 0x1234;
118 for (i = 0; i < a27.length; i++)
119 assert(a27[i] == 0x1234);
121 func2(33)[] = 0x5678;
122 for (i = 0; i < b2.length; i++)
123 assert(b2[i] == 0x5678);
126 short[23] a23 = 0x1234;
127 i = 16;
128 j = 18;
129 a23[i++..++j] = 0x4554;
130 printf("i = %d, j = %d\n", i, j);
131 assert(i == 17);
132 assert(j == 19);
133 assert(a23[15] == 0x1234);
134 assert(a23[16] == 0x4554);
135 assert(a23[17] == 0x4554);
136 assert(a23[18] == 0x4554);
137 assert(a23[19] == 0x1234);
138 assert(a23[20] == 0x1234);
141 /**************************************/
143 int[] b3;
145 int[] func3(int dim)
147 int[] a = new int[dim];
149 b3 = a;
150 return a;
153 void test3()
155 printf("test3()\n");
156 int i;
157 int j;
159 int[1] a1;
160 a1[] = 0x12345678;
161 assert(a1[0] == 0x12345678);
163 int[2] a2;
164 a2[] = 0x12345678;
165 for (i = 0; i < a2.length; i++)
166 assert(a2[i] == 0x12345678);
168 int[3] a3;
169 a3[] = 0x12345678;
170 for (i = 0; i < a3.length; i++)
171 assert(a3[i] == 0x12345678);
173 int[4] a4;
174 a4[] = 0x12345678;
175 for (i = 0; i < a4.length; i++)
176 assert(a4[i] == 0x12345678);
178 int[8] a8;
179 a8[] = 0x12345678;
180 for (i = 0; i < a8.length; i++)
181 assert(a8[i] == 0x12345678);
183 int[27] a27;
184 a27[] = 0x12345678;
185 for (i = 0; i < a27.length; i++)
186 assert(a27[i] == 0x12345678);
188 func3(33)[] = 0x56781234;
189 for (i = 0; i < b3.length; i++)
190 assert(b3[i] == 0x56781234);
193 int[23] a23 = 0x12345678;
194 i = 16;
195 j = 18;
196 a23[i++..++j] = 0x45546776;
197 printf("i = %d, j = %d\n", i, j);
198 assert(i == 17);
199 assert(j == 19);
200 assert(a23[15] == 0x12345678);
201 assert(a23[16] == 0x45546776);
202 assert(a23[17] == 0x45546776);
203 assert(a23[18] == 0x45546776);
204 assert(a23[19] == 0x12345678);
205 assert(a23[20] == 0x12345678);
208 /**************************************/
210 long[] b4;
212 long[] func4(int dim)
214 long[] a = new long[dim];
216 b4 = a;
217 return a;
220 void test4()
222 printf("test4()\n");
223 int i;
224 int j;
226 long[1] a1;
227 a1[] = 0x123456789ABCDEF0;
228 assert(a1[0] == 0x123456789ABCDEF0);
230 long[2] a2;
231 a2[] = 0x123456789ABCDEF0;
232 for (i = 0; i < a2.length; i++)
233 assert(a2[i] == 0x123456789ABCDEF0);
235 long[3] a3;
236 a3[] = 0x123456789ABCDEF0;
237 for (i = 0; i < a3.length; i++)
238 assert(a3[i] == 0x123456789ABCDEF0);
240 long[4] a4;
241 a4[] = 0x123456789ABCDEF0;
242 for (i = 0; i < a4.length; i++)
243 assert(a4[i] == 0x123456789ABCDEF0);
245 long[8] a8;
246 a8[] = 0x123456789ABCDEF0;
247 for (i = 0; i < a8.length; i++)
248 assert(a8[i] == 0x123456789ABCDEF0);
250 long[27] a27;
251 a27[] = 0x123456789ABCDEF0;
252 for (i = 0; i < a27.length; i++)
253 assert(a27[i] == 0x123456789ABCDEF0);
255 func4(33)[] = 0x5678889911223344;
256 for (i = 0; i < b4.length; i++)
257 assert(b4[i] == 0x5678889911223344);
260 long[23] a23 = 0x123456789ABCDEF0;
261 i = 16;
262 j = 18;
263 a23[i++..++j] = 0x567888991122334B;
264 printf("i = %d, j = %d\n", i, j);
265 assert(i == 17);
266 assert(j == 19);
267 assert(a23[15] == 0x123456789ABCDEF0);
268 assert(a23[16] == 0x567888991122334B);
269 assert(a23[17] == 0x567888991122334B);
270 assert(a23[18] == 0x567888991122334B);
271 assert(a23[19] == 0x123456789ABCDEF0);
272 assert(a23[20] == 0x123456789ABCDEF0);
275 /**************************************/
277 real[] b5;
279 real[] func5(int dim)
281 real[] a = new real[dim];
283 b5 = a;
284 return a;
287 void test5()
289 printf("test5()\n");
290 int i;
291 int j;
293 real[1] a1;
294 a1[] = 31234;
295 assert(a1[0] == 31234);
297 real[2] a2;
298 a2[] = 31234;
299 for (i = 0; i < a2.length; i++)
300 assert(a2[i] == 31234);
302 real[3] a3;
303 a3[] = 31234;
304 for (i = 0; i < a3.length; i++)
305 assert(a3[i] == 31234);
307 real[4] a4;
308 a4[] = 31234;
309 for (i = 0; i < a4.length; i++)
310 assert(a4[i] == 31234);
312 real[8] a8;
313 a8[] = 31234;
314 for (i = 0; i < a8.length; i++)
315 assert(a8[i] == 31234);
317 real[27] a27;
318 a27[] = 31234;
319 for (i = 0; i < a27.length; i++)
320 assert(a27[i] == 31234);
322 func5(33)[] = 35678;
323 for (i = 0; i < b5.length; i++)
324 assert(b5[i] == 35678);
327 real[23] a23 = 31234;
328 i = 16;
329 j = 18;
330 a23[i++..++j] = 34554e+4;
331 printf("i = %d, j = %d\n", i, j);
332 assert(i == 17);
333 assert(j == 19);
334 assert(a23[15] == 31234);
335 assert(a23[16] == 34554e+4);
336 assert(a23[17] == 34554e+4);
337 assert(a23[18] == 34554e+4);
338 assert(a23[19] == 31234);
339 assert(a23[20] == 31234);
342 /**************************************/
344 struct ABC
346 int a,b,c,d;
349 ABC abc1 = { a:1, b:2, c:3, d:4 };
350 ABC abc2 = { a:7, b:6, c:8, d:9 };
351 ABC abc3 = { a:5, b:10, c:11, d:12 };
353 ABC[] b6;
355 ABC[] func6(int dim)
357 ABC[] a = new ABC[dim];
359 b6 = a;
360 return a;
363 void test6()
365 printf("test6()\n");
366 int i;
367 int j;
369 ABC[1] a1;
370 a1[] = abc1;
371 assert(a1[0] == abc1);
373 ABC[2] a2;
374 a2[] = abc1;
375 for (i = 0; i < a2.length; i++)
376 assert(a2[i] == abc1);
378 ABC[3] a3;
379 a3[] = abc1;
380 for (i = 0; i < a3.length; i++)
381 assert(a3[i] == abc1);
383 ABC[4] a4;
384 a4[] = abc1;
385 for (i = 0; i < a4.length; i++)
386 assert(a4[i] == abc1);
388 ABC[8] a8;
389 a8[] = abc1;
390 for (i = 0; i < a8.length; i++)
391 assert(a8[i] == abc1);
393 ABC[27] a27;
394 a27[] = abc1;
395 for (i = 0; i < a27.length; i++)
396 assert(a27[i] == abc1);
398 func6(33)[] = abc2;
399 for (i = 0; i < b6.length; i++)
400 assert(b6[i] == abc2);
403 ABC[23] a23 = abc1;
404 i = 16;
405 j = 18;
406 a23[i++..++j] = abc3;
407 printf("i = %d, j = %d\n", i, j);
408 assert(i == 17);
409 assert(j == 19);
410 assert(a23[15] == abc1);
411 assert(a23[16] == abc3);
412 assert(a23[17] == abc3);
413 assert(a23[18] == abc3);
414 assert(a23[19] == abc1);
415 assert(a23[20] == abc1);
418 /**************************************/
420 bool[] b7;
422 bool[] func7(int dim)
424 bool[] a = new bool[dim];
426 b7 = a;
427 return a;
430 void test7()
432 printf("test7()\n");
433 int i;
434 int j;
436 bool[1] a1;
437 a1[] = 1;
438 assert(a1[0] == 1);
440 bool[2] a2;
441 a2[] = 1;
442 for (i = 0; i < a2.length; i++)
443 assert(a2[i] == 1);
445 bool[3] a3;
446 a3[] = 1;
447 for (i = 0; i < a3.length; i++)
448 assert(a3[i] == 1);
450 bool[4] a4;
451 a4[] = 1;
452 for (i = 0; i < a4.length; i++)
453 assert(a4[i] == 1);
455 bool[8] a8;
456 a8[] = 1;
457 for (i = 0; i < a8.length; i++)
458 assert(a8[i] == 1);
460 bool[27] a27;
461 a27[] = 1;
462 for (i = 0; i < a27.length; i++)
463 assert(a27[i] == 1);
465 func7(33)[] = 1;
466 assert(b7.length == 33);
467 for (i = 0; i < b7.length; i++)
468 assert(b7[i] == 1);
470 func7(33)[3..6] = 1;
471 //printf("b7.ptr = %p, b7.length = %d\n", b7.ptr, b7.length);
472 assert(b7.length == 33);
473 for (i = 0; i < b7.length; i++)
475 //printf("b7[%d] = %d\n", i, b7[i]);
476 if (i >= 3 && i < 6)
477 assert(b7[i] == 1);
478 else
479 assert(b7[i] == 0);
482 bool[23] a23 = 1;
483 i = 16;
484 j = 18;
485 a23[i++..++j] = 0;
486 printf("i = %d, j = %d\n", i, j);
487 assert(i == 17);
488 assert(j == 19);
489 assert(a23[15] == 1);
490 assert(a23[16] == 0);
491 assert(a23[17] == 0);
492 assert(a23[18] == 0);
493 assert(a23[19] == 1);
494 assert(a23[20] == 1);
498 /**************************************/
500 bool[] slice8(bool[] b)
502 return b[8..16];
505 void test8()
507 bool[16] b;
508 bool[] b2;
509 b[9] = true;
510 b2 = slice8(b);
511 assert(b2.length == 8);
512 assert(b2[1] == true);
513 b[9] = false;
514 assert(b2[1] == false);
518 /**************************************/
520 bool[] slice9(bool[] b, int i, int j)
522 return b[i..j];
525 void test9()
527 bool[17] b;
528 bool[] b2;
529 b[9] = true;
530 b[16] = true;
531 b2 = slice9(b,8,17);
532 assert(b2.length == 9);
533 assert(b2[1] == true);
534 assert(b2[8] == true);
535 b[9] = false;
536 b[16] = false;
537 assert(b2[1] == false);
538 assert(b2[8] == false);
542 /**************************************/
544 bool* foo10(bool[] b, int i)
546 return &b[i];
549 void test10()
551 bool[17] b;
552 bool* pb;
554 b[8] = true;
555 b[9] = true;
556 pb = foo10(b, 8);
557 assert(*pb == true);
558 b[8] = false;
559 assert(*pb == false);
562 /**************************************/
564 bool* foo11(bool[] b, int i)
566 return &b[i];
569 void test11()
571 bool[17] b;
572 bool* pb;
574 b[9] = true;
575 b[10] = true;
576 pb = foo11(b, 8);
577 assert(pb[1] == true);
578 b[9] = false;
579 assert(pb[1] == false);
583 /**************************************/
585 bool* foo12(bool[] b, int i)
587 return &b[i];
590 void test12()
592 bool[17] b;
593 bool* pb;
595 b[9] = true;
596 b[10] = true;
597 pb = foo12(b, 0);
598 pb = pb + 8;
599 assert(pb[1] == true);
600 b[9] = false;
601 assert(pb[1] == false);
604 /**************************************/
606 bool* foo13(bool* b, int i)
608 return &b[i];
611 void test13()
613 bool[17] b;
614 bool* pb;
616 b[9] = true;
617 b[10] = true;
618 pb = foo13(b.ptr, 8);
619 assert(pb[1] == true);
620 b[9] = false;
621 assert(pb[1] == false);
624 /**************************************/
626 void test14()
628 bool b = true;
629 assert(b);
630 b = !b;
631 assert(!b);
634 /**************************************/
636 void test15()
638 bool b = 1;
639 bool *pb = &b;
640 *pb = false;
641 assert(!b);
645 /**************************************/
647 void foo16(bool[] b1, bool[] b2)
649 b1[0..3] = b2[8..11];
652 void test16()
654 static bool[16] b1 = [1,1,0,1,0,0,0,0];
655 static bool[16] b2 = [0,0,0,0,0,0,0,0, 0,0,1,0,1,1,1,1];
657 foo16(b1, b2);
658 assert(b1[0] == false);
659 assert(b1[1] == false);
660 assert(b1[2] == true);
661 assert(b1[3] == true);
662 assert(b1[4] == false);
663 assert(b1[5] == false);
664 assert(b1[6] == false);
665 assert(b1[7] == false);
666 assert(b1[8] == false);
669 /**************************************/
671 void test17()
673 bool bi = true;
674 byte by;
676 by=bi;
677 assert(by == 1);
681 /**************************************/
683 void test18()
685 bool b = 1;
686 bool c = 1;
687 b |= cast(bool)(3 + c);
688 assert(b == true);
692 /**************************************/
694 void test19()
696 int i;
697 for (i = 0; i < 10; i++){
698 version(dummy) i=22;
700 assert(i==10);
702 char[][] args;
703 foreach(char[] p; args){
704 version(dummy) int i;
708 /**************************************/
710 int main()
712 test1();
713 test2();
714 test3();
715 test4();
716 test5();
717 test6();
718 test7();
719 test8();
720 test9();
721 test10();
722 test11();
723 test12();
724 test13();
725 test14();
726 test15();
727 test16();
728 test17();
729 test18();
730 test19();
732 printf("Success\n");
733 return 0;