| 
					
				 | 
			
			
				@@ -5,106 +5,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "qa/questions/qarith.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * \brief Testing the continued fractions generator. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void test_cf(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  bigfraction_t x = {NULL, NULL}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  cf_t* f; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  size_t i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  bigfraction_t *it; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BIGNUM* expected; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  f = cf_new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  x.h = BN_new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  x.k = BN_new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  expected = BN_new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   *  Testing aᵢ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   *              1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * √2 = 1 + ⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   *                  1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   *           2 +  ⎽⎽⎽⎽⎽⎽ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   *                 2 + … 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&x.h, "14142135623730951"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&x.k, "10000000000000000"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&expected, "2"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  cf_init(f, x.h, x.k); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  it = cf_next(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  assert(BN_is_one(f->a)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  for (i=0; i!=5 && it; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    it = cf_next(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    assert(!BN_cmp(f->a, expected)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  assert(i==5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Testing hᵢ/kᵢ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   *                        1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * φ = (1+√5)/2  = 1 + ⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   *                            1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   *                      1 + ⎽⎽⎽⎽⎽ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   *                          1 + … 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const char* fib[] = {"1", "1", "2", "3", "5", "8", "13"}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&x.h, "323606797749979"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&x.k, "200000000000000"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  cf_init(f, x.h, x.k); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  it = cf_next(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  for (i=1; i!=7; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    BN_dec2bn(&expected, fib[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    assert(!BN_cmp(it->h, expected)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    BN_dec2bn(&expected, fib[i-1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    assert(!BN_cmp(it->k, expected)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    it=cf_next(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&x.h, "60728973"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&x.k, "160523347"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  cf_init(f, x.h, x.k); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* 0 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  it = cf_next(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* 1 / 2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  it = cf_next(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&expected, "2"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  assert(BN_is_one(it->h) && !BN_cmp(it->k, expected)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* 1 / 3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  it = cf_next(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&expected, "3"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  assert(BN_is_one(it->h) && !BN_cmp(it->k, expected)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* 2 / 5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  it = cf_next(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&expected, "2"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  assert(!BN_cmp(expected, it->h)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&expected, "5"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  assert(!BN_cmp(expected, it->k)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* 3 / 8 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  it = cf_next(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&expected, "3"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  assert(!BN_cmp(expected, it->h)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&expected, "8"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  assert(!BN_cmp(expected, it->k)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* 14/ 37 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  it = cf_next(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&expected, "14"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  assert(!BN_cmp(expected, it->h)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  BN_dec2bn(&expected, "37"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  assert(!BN_cmp(expected, it->k)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void test_BN_sqrtmod(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   BIGNUM *a, *b, *expected; 
			 |