void test_cint(void) { real L = 32; std::vector<real> angles; std::vector<Vector> pos; Angdict angdict; //Posdict posdict; Vector a, b, c, d; a.x = 1.; a.y = 2.; b.x = 2.; b.y = 2.; c.x = 2.; c.y = 0.; d.x = 4.; d.y = 4.; angles = {0., PI/4., -PI/4., 0.}; pos = {a, b, c, d}; angdict[0] = angles; //posdict[0] = pos; Pi pi(angdict); /*pi: Vector(0., 0.) Vector(-0.70710678118, 0.) Vector(0.70710678118, 0.) Vector(0., 0.) */ std::vector<real> ni(4); real nc; MATRIX n(4, 4); n.Zero(); /* topological */ calculate_n_topological(n, pos, L, 2); create_ni(n, ni); nc = average(ni); assert_almost_equal(nc, real(2)); assert_almost_equal(Cint(0, pi, nc, n), real(-0.125)); /* Metric */ calculate_n_metric(n, pos, L, 2); create_ni(n, ni); nc = average(ni); assert_almost_equal(nc, real(1)); assert_almost_equal(Cint(0, pi, nc, n), real(-0.25)); /* Voronoi */ calculate_n_voronoi(n, pos, L); create_ni(n, ni); nc = average(ni); assert_almost_equal(nc, real(3)); assert_almost_equal(Cint(0, pi, nc, n), real(-1./12.)); }
void Process(int s[],char x) { static int flag=0,tempnum = 0; if(isdigit(x)) { if(flag==2) { if(Cint(x)==1) { n= n-4; flag =4; tempnum =0; } else { s[n-5]=s[n-5]*Cint(x); s[n++]= Cint(x)-1; flag = 4; tempnum = 0; } } else { tempnum= tempnum*10+Cint(x); flag = 0; } } else if(x=='x') { if(tempnum!=0) s[n++]=tempnum; else s[n++] = 1; s[n++]= -1; s[n++] = (int )x; tempnum =0; flag =1; } else if(x=='^') { s[n++]=-1; s[n++]=(int)x; flag = 2; } else if(x=='+'||x=='-'||x=='*'||x=='/') { if(flag==4) { s[n++]=-1; s[n++]= (int)x; } else if(flag==1) { n-=2; s[n++]=-1; s[n++]= (int)x; } tempnum = 0; flag =3; } else if(x=='#') { if(flag!=4) { n=n-1; s[n++]=-1; s[n]=(int)x; } else if(flag==1) { n=n-2; s[n++]=-2; } else s[n++]=-2; } }