/* This is the Newton_DComplex testing program */
/* Newton_DComplex_test.c - Ch Iossif @ April 2006 */

#include <stdio.h>
#include "Newton_DComplex.h"

int main() {
    dcomplex z,fz,rizes[100],pz;
    double eps,c,d;
    int n,j,l,nr,i,m,nit,kit,ok;

    m=1;
    nit=30;
    eps=1.0e-12;
    nr=0;
    for (i=0;i<100;i++)
        rizes[i]=dcmplx(0.0,0.0);

    n=15;
    c=5.0;
    for (j=-n;j<=n;j++)
        for (l=-n;l<=n;l++) {
            z=dcmplx((double)j*c/n,(double)l*c/n);
            pz=z;
            if (newton_dcomplex(m,nit,eps,&z,&fz,&kit)==1) {
                ok=0;
                for (i=0;i<nr;i++)
                    if ((d=dcmplx_abs(dcmplx_sub(z,rizes[i])))<3*eps)
                        ok=1;
                if (!ok) {
                    rizes[nr++]=z;
                    printf("Input:\t\tz=(%lf%+lfi)\nOutput:\t\tz=(%lf%+lfi)\n\t\tf(z)=(%lf%+lfi)\n\t\t|f(z)|=%le\n\n",pz.real,pz.imag,z.real,z.imag,fz.real,fz.imag,dcmplx_abs(fz));
                }
            }
        }
    return 0;
}

dcomplex f(dcomplex z) {
    return dcmplx_add(dcmplx_mul(dcmplx_sqr(z),z),dcmplx(8.0,0.0));
}

dcomplex df(dcomplex z) {
    return dcmplx_mul(dcmplx(3.0,0.0),dcmplx_sqr(z));
}

