#include <stdio.h>
#include "taylor.h"
#include "checkit.h"

#define PI 3.1415926

int main() {


printf("\n======== Factorial ====== \n\n");

checkit_int(factorial(0), 1);
checkit_int(factorial(1), 1);
checkit_int(factorial(2), 2);
checkit_int(factorial(3), 6);
checkit_int(factorial(4), 24);
checkit_int(factorial(5), 120);
checkit_int(factorial(6), 720);
checkit_int(factorial(7), 720*7);
checkit_int(factorial(8), 720*7*8);
checkit_int(factorial(9), 720*7*8*9);
checkit_int(factorial(10), 720*7*8*9*10);

printf("\n======== Square Root ====== \n\n");


checkit_double(sqRoot(0.25,4), 1.11816);
checkit_double(sqRoot(0.25,8), 1.118034);
checkit_double(sqRoot(0.25,9), 1.11803);

checkit_double(sqRoot(0.21,6), 1.1);
checkit_double(sqRoot(-0.4375, 7), 0.75);
checkit_double(sqRoot(-0.4375, 7), 0.75);
checkit_double(sqRoot(0.1025, 7), 1.05);


checkit_double(sqRoot(0.0,5),  1);
checkit_double(sqRoot(-1,5), 0);

printf("\n======== SINE ====== \n\n");

checkit_double(sine(0,7),0);
checkit_double(sine(1,4),0.841471);
checkit_double(sine(PI/2,4),0.999843);
checkit_double(sine(PI/3,4), 0.866025);
checkit_double(sine(PI/6,6),0.5);
checkit_double(sine(PI/6,5 ), 0.5);
checkit_double(sine(PI/6,4), 0.5);
checkit_double(sine(PI/6,3 ), 0.5);
checkit_double(sine(PI/6,2), 0.499674);
checkit_double(sine(PI/6,1 ), 0.523599);
checkit_double(sine(PI/6,0), 0);

printf("\n======== COSINE ====== \n\n");

checkit_double(cosine(0,7),1);
checkit_double(cosine(1,4),0.540278);
checkit_double(cosine(PI/2,3),0.019969);
checkit_double(cosine(PI/3,4), 0.5);
checkit_double(cosine(PI/6,6),0.866025);
checkit_double(cosine(PI/6,5 ), 0.866025);
checkit_double(cosine(PI/6,4), 0.866025);
checkit_double(cosine(PI/6,3 ), 0.866054);
checkit_double(cosine(PI/6,2), 0.862922);
checkit_double(cosine(PI/6,1 ), 1);
checkit_double(cosine(PI/6,0), 0);
printf("\n============== \n\n");


checkit_double(natLog(4,4), 0);
checkit_double(natLog(0.5,10),  0.40546);
checkit_double(natLog(-0.5,7),-0.692262);
checkit_double(natLog(-0.5,13),-0.69314);


checkit_double(natLog(0,4),  0);







return 0;
}