1 // REQUIRED_ARGS:
2 
3 import core.stdc.stdarg;
4 
5 extern(C)
6 {
7     int printf(const char*, ...);
version(Windows)8     version(Windows)
9     {
10         int _snprintf(char*, size_t, const char*, ...);
11         alias _snprintf snprintf;
12     }
13     else
14         int snprintf(char*, size_t, const char*, ...);
15 }
16 
17 /*************************************/
18 
19 // http://www.digitalmars.com/d/archives/digitalmars/D/bugs/4766.html
20 // Only with -O
21 
randx()22 real randx()
23 {
24     return 1.2;
25 }
26 
test1()27 void test1()
28 {
29     float x10=randx();
30     float x11=randx();
31     float x20=randx();
32     float x21=randx();
33     float y10=randx();
34     float y11=randx();
35     float y20=randx();
36     float y21=randx();
37 
38     float tmp=(
39     x20*x21 + y10*y10 + y10*y11 + y11*y11 +
40     y11*y20 + y20*y20 + y10*y21 + y11*y21 +
41     y21*y21);
42     assert(tmp > 0);
43 }
44 
45 /*************************************/
46 
test2()47 void test2()
48 {
49         double x10=randx();
50         double x11=randx();
51         double x20=randx();
52         double x21=randx();
53         double y10=randx();
54         double y11=randx();
55         double y20=randx();
56         double y21=randx();
57 
58     double tmp=(
59     x20*x21 + y10*y10 + y10*y11 + y11*y11 +
60     y11*y20 + y20*y20 + y10*y21 + y11*y21 +
61     y21*y21);
62     assert(tmp > 0);
63 }
64 
65 /*************************************/
66 
test3()67 void test3()
68 {
69     real x10=randx();
70     real x11=randx();
71     real x20=randx();
72     real x21=randx();
73     real y10=randx();
74     real y11=randx();
75     real y20=randx();
76     real y21=randx();
77 
78     real tmp=(
79     x20*x21 + y10*y10 + y10*y11 + y11*y11 +
80     y11*y20 + y20*y20 + y10*y21 + y11*y21 +
81     y21*y21);
82     assert(tmp > 0);
83 }
84 
85 /*************************************/
86 
test4()87 void test4()
88 {
89      printf("main() : (-128 >= 0)=%s, (-128 <= 0)=%s\n",
90               cast(char*)(-128 >= 0 ? "true" : "false"),
91               cast(char*)(-128 <= 0 ?  "true" : "false"));
92 
93      printf("main() : (128 >= 0)=%s, (128 <= 0)=%s\n",
94               cast(char*)(128 >= 0 ? "true" : "false"),
95               cast(char*)(128 <= 0 ?  "true" : "false"));
96 
97      assert((-128 >= 0 ? "true" : "false") == "false"),
98      assert((-128 <= 0 ? "true" : "false") == "true");
99      assert((+128 >= 0 ? "true" : "false") == "true"),
100      assert((+128 <= 0 ? "true" : "false") == "false");
101 }
102 
103 
104 /*************************************/
105 
foo5()106 int foo5() { assert(0); } // No return.
107 
abc5()108 int abc5()
109 {
110     printf("foo = %d\n", foo5());
111     return 0;
112 }
113 
test5()114 void test5()
115 {
116 }
117 
118 /*************************************/
119 
120 class A9
121 {
this(int[]params...)122     this(int[] params ...)
123     {
124         for (int i = 0; i < params.length; i++)
125         {
126             assert(params[i] == i + 1);
127         }
128     }
129 }
130 
131 class B9
132 {
this()133     this()
134     {
135         init();
136     }
137 
init()138     private void init()
139     {
140         A9 test1 = new A9(1, 2, 3);
141         A9 test2 = new A9(1, 2, 3, 4);
142         int[3] arg;
143         arg[0]=1, arg[1]=2, arg[2]=3;
144         A9 test3 = new A9(arg);
145     }
146 }
147 
test9()148 void test9()
149 {
150     B9 test2 = new B9();
151 }
152 
153 /*************************************/
154 
test10()155 void test10()
156 {
157     auto i = 5u;
158     auto s = typeid(typeof(i)).toString;
159     printf("%.*s\n", cast(int)s.length, s.ptr);
160     assert(typeid(typeof(i)) == typeid(uint));
161 }
162 
163 /*************************************/
164 
test11()165 void test11()
166 {
167     printf("%d\n", 3);
168     printf("xhello world!\n");
169 }
170 
171 /*************************************/
172 
173 real x16;
174 
foo16()175 void foo16()
176 {
177     x16 = -x16;
178 }
179 
bar16()180 void bar16()
181 {
182     return foo16();
183 }
184 
test16()185 void test16()
186 {
187     x16=2;
188     bar16();
189     assert(x16==-2);
190 }
191 
192 /*************************************/
193 
194 class Bar17
195 {
this(...)196         this(...) {}
197 }
198 
199 class Foo17
200 {
201         void opBinary(string op : "+") (Bar17 b) {}
202 }
203 
test17()204 void test17()
205 {
206         auto f = new Foo17;
207         f + new Bar17;
208 }
209 
210 
211 /*************************************/
212 
u18(int n)213 template u18(int n)
214 {
215     static if (n==1) {
216        int a = 1;
217     } else
218        int b = 4;
219 }
220 
test18()221 void test18()
222 {
223    mixin u18!(2);
224    assert(b == 4);
225 }
226 
227 /*************************************/
228 
229 class DP
230 {
231   private:
I(char[]p)232     void I(char[] p)
233     {
234         I(p[1..p.length]);
235     }
236 }
237 
test19()238 void test19()
239 {
240 }
241 
242 /*************************************/
243 
244 struct Struct20
245 {
246     int i;
247 }
248 
test20()249 void test20()
250 {
251     auto s = new Struct20;
252     s.i = 7;
253 }
254 
255 /*************************************/
256 
C21(float f)257 class C21(float f)
258 {
259     float ff = f;
260 }
261 
test21()262 void test21()
263 {
264     auto a = new C21!(1.2);
265     C21!(1.2) b = new C21!(1.2);
266 }
267 
268 /*************************************/
269 
270 const int c23 = b23 * b23;
271 const int a23 = 1;
272 const int b23 = a23 * 3;
273 
T23(int n)274 template T23(int n)
275 {
276     int[n] x23;
277 }
278 
279 mixin T23!(c23);
280 
test23()281 void test23()
282 {
283     assert(x23.length==9);
284 }
285 
286 /*************************************/
287 
cat(int n)288 template cat(int n)
289 {
290    const int dog = n;
291 }
292 
293 const char [] bird = "canary";
294 
295 const int sheep = cat!(bird.length).dog;
296 
test25()297 void test25()
298 {
299     assert(sheep == 6);
300 }
301 
302 /*************************************/
303 
test27()304 void test27()
305 {   int x;
306 
307     string s = (int*function(int ...)[]).mangleof;
308     printf("%.*s\n", cast(int)s.length, s.ptr);
309     assert((int*function(int ...)[]).mangleof == "APFiXPi");
310     assert(typeof(x).mangleof == "i");
311     assert(x.mangleof == "_D6test226test27FZ1xi");
312 }
313 
314 /*************************************/
315 
test29()316 void test29()
317 {
318     ulong a = 10_000_000_000_000_000,
319           b =  1_000_000_000_000_000;
320 
321     printf("test29\n%llx\n%llx\n%llx\n", a, b, a / b);
322     assert((a / b) == 10);
323 }
324 
325 static assert((10_000_000_000_000_000 / 1_000_000_000_000_000) == 10);
326 
327 /*************************************/
328 
chook(int n)329 template chook(int n)
330 {
331    const int chook = 3;
332 }
333 
dog(alias f)334 template dog(alias f) {
335     const int dog =  chook!(f.mangleof.length);
336 }
337 
338 class pig {}
339 
340 const int goose = dog!(pig);
341 
test30()342 void test30()
343 {
344     printf("%d\n", goose);
345     assert(goose == 3);
346 }
347 
348 /*************************************/
349 
dog31(string sheep)350 template dog31(string sheep)
351 {
352   immutable string dog31 = "daschund";
353 }
354 
test31()355 void test31()
356 {
357     string duck = dog31!("bird"[1..3]);
358 
359     assert(duck == "daschund");
360 }
361 
362 /*************************************/
363 
364 struct particle
365 {
366     int   active; /* Active (Yes/No) */
367     float life;   /* Particle Life   */
368     float fade;   /* Fade Speed      */
369 
370     float r;      /* Red Value       */
371     float g;      /* Green Value     */
372     float b;      /* Blue Value      */
373 
374     float x;      /* X Position      */
375     float y;      /* Y Position      */
376 
377     float xi;     /* X Direction     */
378     float yi;     /* Y Direction     */
379 
380     float xg;     /* X Gravity       */
381     float yg;     /* Y Gravity       */
382 }
383 
384 particle[10000] particles;
385 
test32()386 void test32()
387 {
388 }
389 
390 /*************************************/
391 
392 class Foo33
393 {
foo()394     template foo()
395     {
396         int foo() { return 6; }
397     }
398 }
399 
400 
test33()401 void test33()
402 {
403     Foo33 f = new Foo33;
404 
405     assert(f.foo!()() == 6);
406     with (f)
407         assert(foo!()() == 6);
408 }
409 
410 /*************************************/
411 
dog34(string duck)412 template dog34(string duck)
413 {
414     const int dog34 = 2;
415 }
416 
test34()417 void test34()
418 {
419     int aardvark = dog34!("cat" ~ "pig");
420 
421     assert(aardvark == 2);
422 }
423 
424 /*************************************/
425 
426 class A35
427 {
428     private bool quit;
halt()429     void halt() {quit = true;}
isHalted()430     bool isHalted() {return quit;}
431 }
432 
test35()433 void test35()
434 {
435     auto a = new A35;
436 
437     a.halt;         // error here
438     a.halt();
439 
440     a.isHalted;     // error here
441     bool done = a.isHalted;
442     if (a.isHalted)
443     {
444     }
445 }
446 
447 
448 /*************************************/
449 
test36()450 void test36()
451 {
452     bool q = (0.9 + 3.5L == 0.9L + 3.5L);
453     assert(q);
454     static assert(0.9 + 3.5L == 0.9L + 3.5L);
455     assert(0.9 + 3.5L == 0.9L + 3.5L);
456 }
457 
458 /*************************************/
459 
Foo37(T)460 abstract class Foo37(T)
461 {
462     void bar () { }
463 }
464 
465 class Bar37 : Foo37!(int)
466 {
467 }
468 
test37()469 void test37()
470 {
471     auto f = new Bar37;
472 }
473 
474 /*************************************/
475 
test38()476 void test38()
477 {
478         auto s=`hello`;
479         assert(s.length==5);
480         assert(s[0]=='h');
481         assert(s[1]=='e');
482         assert(s[2]=='l');
483         assert(s[3]=='l');
484         assert(s[4]=='o');
485 }
486 
487 /*************************************/
488 
test39()489 void test39()
490 {
491         int value=1;
492         string key = "eins";
493         int[char[]] array;
494 
495         array[key]=value;
496         int* ptr = key in array;
497 
498         assert(value == *ptr);
499 }
500 
501 /*************************************/
502 
test40()503 void test40()
504 {
505         auto s=r"hello";
506         assert(s.length==5);
507         assert(s[0]=='h');
508         assert(s[1]=='e');
509         assert(s[2]=='l');
510         assert(s[3]=='l');
511         assert(s[4]=='o');
512 }
513 
514 /*************************************/
515 
test41()516 void test41()
517 {
518     version (Windows)
519     {
520         version(D_InlineAsm){
521                 double a = 1.2;
522                 double b = 0.2;
523                 double c = 1.4;
524 
525                 asm{
526                         movq XMM0, a;
527                         movq XMM1, b;
528                         addsd XMM1, XMM0;
529                         movq c, XMM1;
530                 }
531 
532                 a += b;
533 
534                 b = a-c;
535                 b = (b>0) ? b : (-1 * b);
536 
537                 assert(b < b.epsilon*4);
538         }
539     }
540 }
541 
542 /*************************************/
543 
544 const char[] tapir = "some horned animal";
545 
546 const byte[] antelope = cast(byte []) tapir;
547 
test42()548 void test42()
549 {
550 }
551 
552 /*************************************/
553 
test43()554 void test43()
555 {
556      string armadillo = "abc" ~ 'a';
557      assert(armadillo == "abca");
558      string armadillo2 = 'b' ~ "abc";
559      assert(armadillo2 == "babc");
560 }
561 
562 /*************************************/
563 
564 const uint baboon44 = 3;
565 
566 const int monkey44 = 4;
567 
568 const ape44 = monkey44 * baboon44;
569 
test44()570 void test44()
571 {
572     assert(ape44 == 12);
573 }
574 
575 /*************************************/
576 
577 class A45
578 {
this()579  this()
580  {
581   b = new B();
582   b.x = 5; // illegal
583  }
584 
585  class B
586  {
587   protected int x;
588  }
589 
590  B b;
591 }
592 
test45()593 void test45()
594 {
595 }
596 
597 
598 /*************************************/
599 
C46(T)600 class C46(T)
601 {
602     private T i; // or protected or package
603 }
604 
test46()605 void test46()
606 {
607     C46!(int) c = new C46!(int); //  class t4.C46!(int).C46 member i is not accessible
608     c.i = 10;
609 }
610 
611 /*************************************/
612 
bug5809()613 void bug5809()
614 {
615     ushort[2] x = void;
616     x[0] = 0;
617     x[1] = 0x1234;
618     ushort *px =  &x[0];
619 
620     uint b = px[0];
621 
622     assert(px[0] == 0);
623 }
624 
625 /*************************************/
626 
bug7546()627 void bug7546()
628 {
629     double p = -0.0;
630     assert(p == 0);
631 }
632 
633 
634 /*************************************/
635 
poly_asm(real x,real[]A)636 real poly_asm(real x, real[] A)
637 in
638 {
639     assert(A.length > 0);
640 }
641 do
642 {
version(D_InlineAsm_X86)643     version (D_InlineAsm_X86)
644     {
645         version (linux)
646         {
647         asm     // assembler by W. Bright
648         {
649             // EDX = (A.length - 1) * real.sizeof
650             mov     ECX,A[EBP]          ; // ECX = A.length
651             dec     ECX                 ;
652             lea     EDX,[ECX][ECX*8]    ;
653             add     EDX,ECX             ;
654             add     EDX,ECX             ;
655             add     EDX,ECX             ;
656             add     EDX,A+4[EBP]        ;
657             fld     real ptr [EDX]      ; // ST0 = coeff[ECX]
658             jecxz   return_ST           ;
659             fld     x[EBP]              ; // ST0 = x
660             fxch    ST(1)               ; // ST1 = x, ST0 = r
661             align   4                   ;
662     L2:     fmul    ST,ST(1)            ; // r *= x
663             fld     real ptr -12[EDX]   ;
664             sub     EDX,12              ; // deg--
665             faddp   ST(1),ST            ;
666             dec     ECX                 ;
667             jne     L2                  ;
668             fxch    ST(1)               ; // ST1 = r, ST0 = x
669             fstp    ST(0)               ; // dump x
670             align   4                   ;
671     return_ST:                          ;
672             ;
673         }
674         }
675         else version (OSX)
676         {
677             asm // assembler by W. Bright
678             {
679                 // EDX = (A.length - 1) * real.sizeof
680                 mov     ECX,A[EBP]              ; // ECX = A.length
681                 dec     ECX                     ;
682                 lea     EDX,[ECX*8]             ;
683                 add     EDX,EDX                 ;
684                 add     EDX,A+4[EBP]            ;
685                 fld     real ptr [EDX]          ; // ST0 = coeff[ECX]
686                 jecxz   return_ST               ;
687                 fld     x[EBP]                  ; // ST0 = x
688                 fxch    ST(1)                   ; // ST1 = x, ST0 = r
689                 align   4                       ;
690         L2:     fmul    ST,ST(1)                ; // r *= x
691                 fld     real ptr -16[EDX]       ;
692                 sub     EDX,16                  ; // deg--
693                 faddp   ST(1),ST                ;
694                 dec     ECX                     ;
695                 jne     L2                      ;
696                 fxch    ST(1)                   ; // ST1 = r, ST0 = x
697                 fstp    ST(0)                   ; // dump x
698                 align   4                       ;
699         return_ST:                              ;
700                 ;
701             }
702         }
703         else version (FreeBSD)
704         {
705         asm     // assembler by W. Bright
706         {
707             // EDX = (A.length - 1) * real.sizeof
708             mov     ECX,A[EBP]          ; // ECX = A.length
709             dec     ECX                 ;
710             lea     EDX,[ECX][ECX*8]    ;
711             add     EDX,ECX             ;
712             add     EDX,ECX             ;
713             add     EDX,ECX             ;
714             add     EDX,A+4[EBP]        ;
715             fld     real ptr [EDX]      ; // ST0 = coeff[ECX]
716             jecxz   return_ST           ;
717             fld     x[EBP]              ; // ST0 = x
718             fxch    ST(1)               ; // ST1 = x, ST0 = r
719             align   4                   ;
720     L2:     fmul    ST,ST(1)            ; // r *= x
721             fld     real ptr -12[EDX]   ;
722             sub     EDX,12              ; // deg--
723             faddp   ST(1),ST            ;
724             dec     ECX                 ;
725             jne     L2                  ;
726             fxch    ST(1)               ; // ST1 = r, ST0 = x
727             fstp    ST(0)               ; // dump x
728             align   4                   ;
729     return_ST:                          ;
730             ;
731         }
732         }
733         else version (Solaris)
734         {
735         asm     // assembler by W. Bright
736         {
737             // EDX = (A.length - 1) * real.sizeof
738             mov     ECX,A[EBP]          ; // ECX = A.length
739             dec     ECX                 ;
740             lea     EDX,[ECX][ECX*8]    ;
741             add     EDX,ECX             ;
742             add     EDX,ECX             ;
743             add     EDX,ECX             ;
744             add     EDX,A+4[EBP]        ;
745             fld     real ptr [EDX]      ; // ST0 = coeff[ECX]
746             jecxz   return_ST           ;
747             fld     x[EBP]              ; // ST0 = x
748             fxch    ST(1)               ; // ST1 = x, ST0 = r
749             align   4                   ;
750     L2:     fmul    ST,ST(1)            ; // r *= x
751             fld     real ptr -12[EDX]   ;
752             sub     EDX,12              ; // deg--
753             faddp   ST(1),ST            ;
754             dec     ECX                 ;
755             jne     L2                  ;
756             fxch    ST(1)               ; // ST1 = r, ST0 = x
757             fstp    ST(0)               ; // dump x
758             align   4                   ;
759     return_ST:                          ;
760             ;
761         }
762         }
763         else
764         {
765         asm     // assembler by W. Bright
766         {
767             // EDX = (A.length - 1) * real.sizeof
768             mov     ECX,A[EBP]          ; // ECX = A.length
769             dec     ECX                 ;
770             lea     EDX,[ECX][ECX*8]    ;
771             add     EDX,ECX             ;
772             add     EDX,A+4[EBP]        ;
773             fld     real ptr [EDX]      ; // ST0 = coeff[ECX]
774             jecxz   return_ST           ;
775             fld     x[EBP]              ; // ST0 = x
776             fxch    ST(1)               ; // ST1 = x, ST0 = r
777             align   4                   ;
778     L2:     fmul    ST,ST(1)            ; // r *= x
779             fld     real ptr -10[EDX]   ;
780             sub     EDX,10              ; // deg--
781             faddp   ST(1),ST            ;
782             dec     ECX                 ;
783             jne     L2                  ;
784             fxch    ST(1)               ; // ST1 = r, ST0 = x
785             fstp    ST(0)               ; // dump x
786             align   4                   ;
787     return_ST:                          ;
788             ;
789         }
790         }
791     }
792     else
793     {
794         printf("Sorry, you don't seem to have InlineAsm_X86\n");
795         return 0;
796     }
797 }
798 
poly_c(real x,real[]A)799 real poly_c(real x, real[] A)
800 in
801 {
802     assert(A.length > 0);
803 }
804 do
805 {
806     ptrdiff_t i = A.length - 1;
807     real r = A[i];
808     while (--i >= 0)
809     {
810         r *= x;
811         r += A[i];
812     }
813     return r;
814 }
815 
test47()816 void test47()
817 {
818     real x = 3.1;
819     static real[] pp = [56.1, 32.7, 6];
820     real r;
821 
822     printf("The result should be %Lf\n",(56.1L + (32.7L + 6L * x) * x));
823     printf("The C version outputs %Lf\n", poly_c(x, pp));
824     printf("The asm version outputs %Lf\n", poly_asm(x, pp));
825 
826     r = (56.1L + (32.7L + 6L * x) * x);
827     assert(r == poly_c(x, pp));
828     version (D_InlineAsm_X86)
829         assert(r == poly_asm(x, pp));
830 }
831 
832 /*************************************/
833 
834 const c48 = 1uL-1;
835 
test48()836 void test48()
837 {
838     assert(c48 == 0);
839 }
840 
841 /*************************************/
842 
cat49()843 template cat49()
844 {
845      static assert(1);  // OK
846      static if (1)
847      {
848         static assert(1); // doesn't work
849         static if (1)
850         {
851              static assert(1);  // OK
852              const int cat49 = 3;
853         }
854      }
855 }
856 
test49()857 void test49()
858 {
859     const int a = cat49!();
860     assert(a == 3);
861 }
862 
863 /*************************************/
864 
test50()865 void test50()
866 {
867     if (auto x = 1)
868     {
869         assert(typeid(typeof(x)) == typeid(int));
870         assert(x == 1);
871     }
872     else
873         assert(0);
874 
875     if (int x = 1)
876     {
877         assert(typeid(typeof(x)) == typeid(int));
878         assert(x == 1);
879     }
880     else
881         assert(0);
882 
883     if (1)
884     {
885     }
886     else
887         assert(0);
888 }
889 
890 /*************************************/
891 
test51()892 void test51()
893 {
894     bool b;
895     assert(b == false);
896     b &= 1;
897     assert(b == false);
898     b |= 1;
899     assert(b == true);
900     b ^= 1;
901     assert(b == false);
902     b = b | true;
903     assert(b == true);
904     b = b & false;
905     assert(b == false);
906     b = b ^ true;
907     assert(b == true);
908     b = !b;
909     assert(b == false);
910 }
911 
912 /*************************************/
913 
914 alias int function (int) x52;
915 
T52(string str)916 template T52(string str){
917         const int T52 = 1;
918 }
919 
920 static assert(T52!(x52.mangleof));
921 
test52()922 void test52()
923 {
924 }
925 
926 /*************************************/
927 
myfunc(int a1,...)928 void myfunc(int a1, ...) {
929         va_list argument_list;
930         TypeInfo argument_type;
931         string sa; int ia; double da;
932         assert(_arguments.length == 9);
933 
934         va_start(argument_list, a1);
935         for (int i = 0; i < _arguments.length; ) {
936                 if ((argument_type=_arguments[i++]) == typeid(string)) {
937                         va_arg(argument_list, sa);
938                         switch (i)
939                         {
940                             case 1: assert(sa == "2"); break;
941                             case 7: assert(sa == "8"); break;
942                             case 8: assert(sa == "9"); break;
943                             case 9: assert(sa == "10"); break;
944                             default:
945                                 printf("i = %d\n", i);
946                                 assert(false);
947                         }
948                 } else if (argument_type == typeid(int)) {
949                         va_arg(argument_list, ia);
950                         assert(ia == i+1);
951                 } else if (argument_type == typeid(double)) {
952                         va_arg(argument_list, da);
953                         const e = i+1;
954                         assert((e - 0.0001) < da && da < (e + 0.0001));
955                 } else {
956                         assert(false, argument_type.toString());
957                 }
958         }
959         va_end(argument_list);
960 }
961 
test6758()962 void test6758() {
963         myfunc(1, 2, 3, 4, 5, 6, 7, 8, "9", "10");                              // Fails.
964         myfunc(1, 2.0, 3, 4, 5, 6, 7, 8, "9", "10");                    // Works OK.
965         myfunc(1, 2, 3, 4, 5, 6, 7, "8", "9", "10");                    // Works OK.
966         myfunc(1, "2", 3, 4, 5, 6, 7, 8, "9", "10");                    // Works OK.
967 }
968 
969 
970 /*************************************/
971 
f18573()972 real f18573() { return 1; }
973 
test18573()974 void test18573()
975 {
976     cast(void) f18573();
977     cast(void) f18573();
978     cast(void) f18573();
979     cast(void) f18573();
980     cast(void) f18573();
981     cast(void) f18573();
982     cast(void) f18573();
983 
984     real b = 2;
985     assert(b == 2); /* fails; should pass */
986 }
987 
988 /*************************************/
989 
main()990 int main()
991 {
992     test1();
993     test2();
994     test3();
995     test4();
996     test5();
997     test9();
998     test10();
999     test11();
1000     test16();
1001     test17();
1002     test18();
1003     test19();
1004     test20();
1005     test21();
1006     test23();
1007     test25();
1008     test27();
1009     test29();
1010     test30();
1011     test31();
1012     test32();
1013     test33();
1014     test34();
1015     test35();
1016     test36();
1017     test37();
1018     test38();
1019     test39();
1020     test40();
1021     test41();
1022     test42();
1023     test43();
1024     test44();
1025     test45();
1026     test46();
1027     bug5809();
1028     bug7546();
1029     test47();
1030     test48();
1031     test49();
1032     test50();
1033     test51();
1034     test52();
1035     test6758();
1036     test18573();
1037 
1038     printf("Success\n");
1039     return 0;
1040 }
1041