5e7adb9cb86b84aa7a6be2ef054b27cfc8861a91
[frac.git] / famous_test.c
blob5e7adb9cb86b84aa7a6be2ef054b27cfc8861a91
1 // Test famous continued fraction expansions are correct.
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 void check_match(cf_t (*cf_new_fn)(), char *result) {
11 mpz_t z;
12 mpz_init(z);
13 cf_t x, conv;
14 x = cf_new_fn();
15 conv = cf_new_cf_to_decimal(x);
16 int len = strlen(result);
17 char s[len + 1];
18 for (int i = 0; i <= len; i++) {
19 cf_get(z, conv);
20 s[i] = mpz_get_ui(z) + '0';
22 s[len] = 0;
23 EXPECT(!strcmp(s, result));
25 cf_free(conv);
26 cf_free(x);
27 mpz_clear(z);
30 int main() {
31 check_match(cf_new_e, "2718281828");
32 check_match(cf_new_pi, "31415926535897932384");
33 check_match(cf_new_tan1, "15574077246549022305");
35 mpz_t z;
36 mpz_init(z);
37 cf_t e = cf_new_e();
38 cf_t pi = cf_new_pi();
39 mpz_t addarray[8];
40 for (int i = 0; i < 8; i++) {
41 mpz_init(addarray[i]);
42 mpz_set_ui(addarray[i], 0);
44 mpz_set_ui(addarray[1], 1);
45 mpz_set_ui(addarray[2], 1);
46 mpz_set_ui(addarray[7], 1);
47 cf_t b = cf_new_bihom(e, pi, addarray);
48 cf_t conv = cf_new_cf_to_decimal(b);
49 cf_get(z, conv);
50 gmp_printf("e + pi = %Zd.", z);
51 for (int i = 0; i <= 20; i++) {
52 cf_get(z, conv);
53 gmp_printf("%Zd", z);
55 printf("\n");
57 mpz_clear(z);
58 return 0;