171 lines
4.1 KiB
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();
|
|
} |