Replaced Newton's method with binary search.
[frac.git] / bihom_test.c
blob10548f192b3ac642835455d569f1e6aa865b8d3c
1 // Test quadratic algorithm.
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <gmp.h>
7 #include "cf.h"
8 #include "test.h"
10 int main() {
11 // I used bc to get the reference values.
12 // Check e + pi
13 cf_t e = cf_new_e();
14 cf_t pi = cf_new_pi();
15 mpz_t addarray[8];
16 for (int i = 0; i < 8; i++) {
17 mpz_init(addarray[i]);
19 mpz_set_ui(addarray[1], 1);
20 mpz_set_ui(addarray[2], 1);
21 mpz_set_ui(addarray[7], 1);
23 cf_t b = cf_new_bihom(e, pi, addarray);
25 CF_EXPECT_DEC(b, "5.8598744820488384738");
27 cf_free(b);
28 cf_free(e);
29 cf_free(pi);
31 // Check 2 sin 1 cos 2 = sin 2 = 0.909...
32 cf_t s1, c1;
33 s1 = cf_new_sin1();
34 c1 = cf_new_cos1();
35 mpz_set_ui(addarray[0], 2);
36 mpz_set_ui(addarray[1], 0);
37 mpz_set_ui(addarray[2], 0);
38 mpz_set_si(addarray[7], 1);
39 b = cf_new_bihom(s1, c1, addarray);
41 CF_EXPECT_DEC(b, "0.9092974268256816953");
43 cf_free(b);
44 cf_free(c1);
45 cf_free(s1);
47 // Check 2 (cos 1)^2 - 1 = cos 2 =
48 s1 = cf_new_cos1(); // TODO: Implement tee, use that instead.
49 c1 = cf_new_cos1();
50 mpz_set_si(addarray[0], 2);
51 mpz_set_si(addarray[3], -1);
52 mpz_set_si(addarray[7], 1);
53 b = cf_new_bihom(s1, c1, addarray);
55 CF_EXPECT_DEC(b, "-0.41614683654714238699");
57 cf_free(b);
58 cf_free(c1);
59 cf_free(s1);
61 for (int i = 0; i < 8; i++) {
62 mpz_clear(addarray[i]);
64 return 0;