1 package com.cliffc.aa.node;
6 import org.junit.Ignore;
14 import static org.junit.Assert.assertEquals;
15 import static org.junit.Assert.assertTrue;
64 uadd.
_val = uaddSTART;
65 anum.
_val = anumSTART;
66 aflt.
_val = afltSTART;
67 aint.
_val = aintSTART;
68 astr.
_val = astrSTART;
120 Type[] uadds =
new Type[]{uaddSTART,uaddALL.
dual(),uaddVAL1START,uaddVAL2START,uaddVAL1XALL,uaddVAL2XALL,uaddVAL1ALL,uaddVAL2ALL,uaddALL};
121 Type[] anums =
new Type[]{anumSTART,anumALL.
dual(),anumVAL1START,anumVAL2START,anumVAL1XALL,anumVAL2XALL,anumVAL1ALL,anumVAL2ALL,anumALL};
122 Type[] aflts =
new Type[]{afltSTART,afltALL.
dual(),afltVAL1START,afltVAL2START,afltVAL1XALL,afltVAL2XALL,afltVAL1ALL,afltVAL2ALL,afltALL};
123 Type[] aints =
new Type[]{aintSTART,aintALL.
dual(),aintVAL1START,aintVAL2START,aintVAL1XALL,aintVAL2XALL,aintVAL1ALL,aintVAL2ALL,aintALL};
124 Type[] astrs =
new Type[]{astrSTART,astrALL.
dual(),astrVAL1START,astrVAL2START,astrVAL1XALL,astrVAL2XALL,astrVAL1ALL,astrVAL2ALL,astrALL};
125 Type[][] tfpss =
new Type[][]{aflts,aints,astrs,anums,uadds};
130 for(
Type[] tfps : tfpss ) {
131 Type start = tfps[0], xall = tfps[1], val1s = tfps[2], val2s = tfps[3];
132 Type val1x = tfps[4], val2x = tfps[5], val1a = tfps[6], val2a = tfps[7];
135 assertTrue(start.
isa(xall ));
136 assertTrue(start.
isa(val1s)); assertTrue(start.
isa(val2s));
137 assertTrue(xall .isa(val1x)); assertTrue(xall .isa(val2x));
138 assertTrue(val1s.isa(val1x)); assertTrue(val2s.isa(val2x));
139 assertTrue(val1x.
isa(val1a)); assertTrue(val2x.isa(val2a));
140 assertTrue(val1a.isa(all )); assertTrue(val2a.isa(all ));
146 assertTrue(uaddALL.
dual().isa(anumALL.
dual()));
147 assertTrue(anumALL.
dual().isa(afltALL.
dual()));
148 assertTrue(anumALL.
dual().isa(aintALL.
dual()));
149 assertTrue(uaddALL.
dual().isa(astrALL.
dual()));
151 assertTrue(astrALL.
isa(uaddALL));
152 assertTrue(aintALL.
isa(anumALL));
153 assertTrue(afltALL.
isa(anumALL));
154 assertTrue(anumALL.
isa(uaddALL));
165 int len = argss.length;
166 int num = argss[0].
_ts.length;
167 for(
int i=0; i<len; i++ ) {
171 for(
int j=i+1; j<len; j++ ) {
173 for(
int k=0; k<num-1; k++ ) {
176 if( ttik==ttjk )
continue;
177 if( ttik.
isa(ttjk) ) order |= 1;
178 else if( ttjk.
isa(ttik) ) order |= 2;
180 if( order==3 )
continue midloop;
182 assert order==1 || order==2;
183 Type ttiN = tti.
at(num-1);
184 Type ttjN = ttj.
at(num-1);
185 if( order==1 ) assertTrue(
"Test is broken: "+tti+
" isa "+ttj+
", but "+ttiN+
" !isa "+ttjN,ttiN.
isa(ttjN));
186 else assertTrue(
"Test is broken: "+ttj+
" isa "+tti+
", but "+ttjN+
" !isa "+ttiN,ttjN.
isa(ttiN));
193 for(
int i=0; i<argss.length; i++ ) {
194 for(
int j=0; j<ins.length; j++ )
195 ins[j]._val = argss[i].at(j);
199 for(
int i=0; i<argss.length; i++ ) {
202 assertEquals(
"Expect "+expect+
", but actual is "+actual+
", for ("+argss[i].at(3)+
", "+argss[i].at(4)+
")",
246 @SuppressWarnings(
"unchecked")
272 Node[] ins =
new Node[]{ctrl,mem,fp_mul,arg1,arg2};
303 assert tadd1X.
isa(tnum1X) && tnum1X.isa(tflt1X) && tflt1X.isa(tnum1) && tnum1.
isa(tadd1);
362 assert tadd2X.
isa(tnum2X) && tnum2X.
isa(tflt2X) && tflt2X.isa(tnum2) && tnum2.isa(tadd2);
447 fi_s,fi_s.
dual(),fifs,fifs.
dual(),};
450 HashMap<TypeTuple,Type> cvals =
new HashMap<>();
451 for(
Type targ3 : targs ) {
453 for(
Type targ4 : targs ) {
455 for(
Type tfdx : tfdxs ) {
459 cvals.put(args,tcall);
465 Set<TypeTuple> keys = cvals.keySet();
469 assertTrue(cvals.get(key0).isa(cvals.get(key1)));
541 Node[] nodes =
new Node[]{ctl,mem,rpc,dsp_prims,dsp_file,dsp_file_obj,dsp_file_ptr,fun,parm_mem,parm_dsp,ret,fptr,env};
547 for(
Node n : nodes ) {
560 assertEquals(tdptr0,tret);
564 assertEquals(tfptr0,tdisp0.at(tdisp0.fld_find(
"fact")));
621 tmem(
new int[]{a1},a_int_b_abc),
642 Type[] rez1 =
check(gvn,sigs[2],mems[1],args[0],args[8]);
643 Type[] rez2 =
check(gvn,sigs[2],mems[0],args[0],args[8]);
644 for(
int k=0; k<rez1.length; k++ )
645 assertTrue(rez1[k].isa(rez2[k]));
650 Type[][][][][] rezs =
new Type[sigs.length][mems.length][args.length][args.length][];
651 for(
int is = 0; is<sigs.length; is++ )
652 for(
int im = 0; im<mems.length; im++ )
653 for(
int ia0 = 0; ia0<args.length; ia0++ )
654 for(
int ia1 = 0; ia1<args.length; ia1++ )
655 rezs[is][im][ia0][ia1] =
check(gvn,sigs[is],mems[im],args[ia0],args[ia1]);
658 for(
int is = 0; is<sigs.length; is++ )
659 for(
int js = 0; js<sigs.length; js++ )
660 if( sigs[is].isa(sigs[js]) )
661 for(
int im = 0; im<mems.length; im++ )
662 for(
int jm = 0; jm<mems.length; jm++ )
663 if( mems[im].isa(mems[jm]) )
664 for(
int ia0 = 0; ia0<args.length; ia0++ )
665 for(
int ja0 = 0; ja0<args.length; ja0++ )
666 if( args[ia0].isa(args[ja0]) )
667 for(
int ia1 = 0; ia1<args.length; ia1++ )
668 for(
int ja1 = 0; ja1<args.length; ja1++ )
669 if( args[ia1].isa(args[ja1]) ) {
670 Type[] rezi = rezs[is][im][ia0][ia1];
671 Type[] rezj = rezs[js][jm][ja0][ja1];
672 for(
int k=0; k<rezi.length; k++ )
673 if( !rezi[k].isa(rezj[k]) )
674 perror(
"Not monotonic",rezi[k],rezj[k]);
708 if( !actual1.
isa(formal1) && !formal1.
isa(actual1) )
709 perror(
"arg1-vs-formal1",actual1,formal1);
712 if( !actual2.
isa(formal2) && !formal2.
isa(actual2) )
713 perror(
"arg2-vs-formal2",actual2,formal2);
716 return new Type[]{tpm,tp1,tp2};
721 System.out.println(msg+
", "+t1+
" is not "+t2);
729 if( as !=
null && as.length> 0 ) max = Math.max(max,as[as.length-1]);
737 for(
int i=0; i<as.length; i++ )