flex-bison-in-action/analyzers/polynomials/poly_calc/test_poly_calc.c

171 lines
4.1 KiB
C

// gcc test_poly_calc.c poly_calc.c
#include <stdio.h>
#include <stdlib.h>
#include "poly_calc.h"
void tests();
void test1();
void test2();
void test3();
void test4();
void test5();
int main() {
tests();
return 0;
}
void test6() {
printf("TEST 6: MUL POLY AND UINT\n");
// (-6x^4+3x+1)*10 = -60x^4+30x^1+10
Polynomial p1, p2;
init_polynomial(&p1);
add_term(&p1, 1, 0);
add_term(&p1, -6, 4);
add_term(&p1, 3, 1);
// Целое число так же представляю в виде полинома
init_polynomial(&p2);
add_term(&p2, 10, 0);
Polynomial res = mul_polynomials(&p1, &p2);
sort_polynomial(&res);
printf("EXPECTED:\n-60x^4+30x^1+10\n");
printf("OUTPUT:\n");
print_polynomial(&res, 'x');
free_polynomial(&p1);
free_polynomial(&p2);
free_polynomial(&res);
}
void test5() {
printf("TEST 5: UINT DEGREE\n");
// (-6x^4+3x+1)^5 = -7776x^20+19440x^17+6480x^16-19440x^14-12960x^13-2160x^12+9720x^11+9720x^10+3240x^9-2070x^8-3240x^7-1620x^6-117x^5+375x^4+270x^3+90x^2+15x^1+1
Polynomial p;
init_polynomial(&p);
add_term(&p, 1, 0);
add_term(&p, -6, 4);
add_term(&p, 3, 1);
Polynomial res = deg_poly(&p, 5);
sort_polynomial(&res);
printf("EXPECTED:\n-7776x^20+19440x^17+6480x^16-19440x^14-12960x^13-2160x^12+9720x^11+9720x^10+3240x^9-2070x^8-3240x^7-1620x^6-117x^5+375x^4+270x^3+90x^2+15x^1+1\n");
printf("OUTPUT:\n");
print_polynomial(&res, 'x');
free_polynomial(&p);
free_polynomial(&res);
}
void test4() {
printf("TEST 4: MUL\n");
// (-6x^4+3x+1) * (3x^4+2x^2-10) = -18x^8-12x^6+9x^5+63x^4+6x^3+2x^2-30x^1-10
Polynomial p1, p2;
init_polynomial(&p1);
add_term(&p1, 1, 0);
add_term(&p1, -6, 4);
add_term(&p1, 3, 1);
init_polynomial(&p2);
add_term(&p2, -10, 0);
add_term(&p2, 2, 2);
add_term(&p2, 3, 4);
Polynomial res = mul_polynomials(&p1, &p2);
sort_polynomial(&res);
printf("EXPECTED:\n-18x^8-12x^6+9x^5+63x^4+6x^3+2x^2-30x^1-10\n");
printf("OUTPUT:\n");
print_polynomial(&res, 'x');
free_polynomial(&p1);
free_polynomial(&p2);
free_polynomial(&res);
}
void test3() {
printf("TEST 3: SUB\n");
// (-6x^4+3x+5x+10+1) - (3x^4+2x^2-10) = -9x^4-2x^2+8x^1+21
Polynomial p1, p2;
init_polynomial(&p1);
add_term(&p1, 1, 0);
add_term(&p1, -6, 4);
add_term(&p1, 3, 1);
add_term(&p1, 5, 1);
add_term(&p1, 10, 0);
init_polynomial(&p2);
add_term(&p2, -10, 0);
add_term(&p2, 2, 2);
add_term(&p2, 3, 4);
Polynomial res = sub_polynomials(&p1, &p2);
sort_polynomial(&res);
printf("EXPECTED:\n-9x^4-2x^2+8x^1+21\n");
printf("OUTPUT:\n");
print_polynomial(&res, 'x');
free_polynomial(&p1);
free_polynomial(&p2);
free_polynomial(&res);
}
void test2() {
printf("TEST 2: ADD\n");
// (-6x^4+3x+1) + (3x^4+2x^2-10) = -3x^4+2x^2+3x-9
Polynomial p1, p2;
init_polynomial(&p1);
add_term(&p1, 1, 0);
add_term(&p1, -6, 4);
add_term(&p1, 3, 1);
init_polynomial(&p2);
add_term(&p2, -10, 0);
add_term(&p2, 2, 2);
add_term(&p2, 3, 4);
Polynomial res = add_polynomials(&p1, &p2);
sort_polynomial(&res);
printf("EXPECTED:\n-3x^4+2x^2+3x^1-9\n");
printf("OUTPUT:\n");
print_polynomial(&res, 'x');
free_polynomial(&p1);
free_polynomial(&p2);
free_polynomial(&res);
}
void test1() {
printf("TEST 1: INIT\n");
Polynomial poly1, poly2;
init_polynomial(&poly1);
add_term(&poly1, 3, 2);
add_term(&poly1, 2, 1);
add_term(&poly1, -1, 0);
sort_polynomial(&poly1);
init_polynomial(&poly2);
add_term(&poly2, -2, 3);
add_term(&poly2, 4, 2);
add_term(&poly2, -5, 0);
sort_polynomial(&poly2);
printf("EXPECTED:\n+3x^2+2x^1-1\n-2x^3+4x^2-5\n");
printf("OUTPUT:\n");
print_polynomial(&poly1, 'x');
print_polynomial(&poly2, 'x');
free_polynomial(&poly1);
free_polynomial(&poly2);
}
void tests() {
test1(); printf("\n\n");
test2(); printf("\n\n");
test3(); printf("\n\n");
test4(); printf("\n\n");
test5(); printf("\n\n");
test6();
}