File: tget_function_arity.c

package info (click to toggle)
sollya 7.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 13,864 kB
  • sloc: ansic: 117,441; yacc: 8,822; lex: 2,419; makefile: 870; cpp: 76
file content (111 lines) | stat: -rw-r--r-- 3,782 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <sollya.h>
#include <mpfr.h>
#include <mpfi.h>

void euler_gamma(mpfr_t res, mp_prec_t prec) {
  mpfr_set_prec(res, prec);
  mpfr_const_euler(res, GMP_RNDN);
  return;
}

int stupid1(mpfi_t result, mpfi_t x, int n) {
  (void)x; /* Avoiding "unused parameter" warning */
  (void)n; /* Avoiding "unused parameter" warning */
  mpfi_set_ui(result, 0);
  return 0;
}

int main(void) {
  sollya_obj_t f, tmp;
  int n;
  int res;

  sollya_lib_init();

  /* Constant */
  f = SOLLYA_PI;
  n = -1;
  res = sollya_lib_get_function_arity(&n, f);
  if (res) sollya_lib_printf("Arity of %b: %d\n", f, n);
  else sollya_lib_printf("%b is not a functional expression (n=%d. Expecting -1)\n", f, n);
  sollya_lib_clear_obj(f);

  /* Another constant */
  f = SOLLYA_CONST(3);
  n = -1;
  res = sollya_lib_get_function_arity(&n, f);
  if (res) sollya_lib_printf("Arity of %b: %d\n", f, n);
  else sollya_lib_printf("%b is not a functional expression (n=%d. Expecting -1)\n", f, n);
  sollya_lib_clear_obj(f);

  /* A library constant constant */
  f = sollya_lib_libraryconstant("superconst", euler_gamma);
  n = -1;
  res = sollya_lib_get_function_arity(&n, f);
  if (res) sollya_lib_printf("Arity of %b: %d\n", f, n);
  else sollya_lib_printf("%b is not a functional expression (n=%d. Expecting -1)\n", f, n);
  sollya_lib_clear_obj(f);

  /* Free variable */
  f = SOLLYA_X_;
  n = -1;
  res = sollya_lib_get_function_arity(&n, f);
  if (res) sollya_lib_printf("Arity of %b: %d\n", f, n);
  else sollya_lib_printf("%b is not a functional expression (n=%d. Expecting -1)\n", f, n);
  sollya_lib_clear_obj(f);

  /* Elementary function */
  f = SOLLYA_EXP(SOLLYA_X_);
  n = -1;
  res = sollya_lib_get_function_arity(&n, f);
  if (res) sollya_lib_printf("Arity of %b: %d\n", f, n);
  else sollya_lib_printf("%b is not a functional expression (n=%d. Expecting -1)\n", f, n);
  sollya_lib_clear_obj(f);

  /* Procedure function */
  tmp = sollya_lib_parse_string("proc(X,n,p) {var res, oldPrec; oldPrec = prec; prec = p!; res = exp(X); prec = oldPrec!; return res; };");
  tmp = sollya_lib_build_function_procedurefunction(SOLLYA_X_, tmp);
  f = sollya_lib_diff(tmp);
  n = -1;
  res = sollya_lib_get_function_arity(&n, f);
  if (res) sollya_lib_printf("Arity of %b: %d\n", f, n);
  else sollya_lib_printf("%b is not a functional expression (n=%d. Expecting -1)\n", f, n);
  sollya_lib_clear_obj(tmp);
  sollya_lib_clear_obj(f);

  /* Library function */
  f = sollya_lib_build_function_libraryfunction(SOLLYA_X_, "stupid1", stupid1);
  n = -1;
  res = sollya_lib_get_function_arity(&n, f);
  if (res) sollya_lib_printf("Arity of %b: %d\n", f, n);
  else sollya_lib_printf("%b is not a functional expression (n=%d. Expecting -1)\n", f, n);
  sollya_lib_clear_obj(f);

  /* arithmetic operator */
  f = SOLLYA_ADD(SOLLYA_X_,
                 sollya_lib_build_function_libraryfunction(SOLLYA_X_, "stupid1", stupid1));
  n = -1;
  res = sollya_lib_get_function_arity(&n, f);
  if (res) sollya_lib_printf("Arity of %b: %d\n", f, n);
  else sollya_lib_printf("%b is not a functional expression (n=%d. Expecting -1)\n", f, n);
  sollya_lib_clear_obj(f);

  /* A Sollya object that is not an expression */
  f = sollya_lib_absolute();
  n = -1;
  res = sollya_lib_get_function_arity(&n, f);
  if (res) sollya_lib_printf("Arity of %b: %d\n", f, n);
  else sollya_lib_printf("%b is not a functional expression (n=%d. Expecting -1)\n", f, n);
  sollya_lib_clear_obj(f);

  /* Another one */
  f = sollya_lib_parse_string("[1,2]");
  n = -1;
  res = sollya_lib_get_function_arity(&n, f);
  if (res) sollya_lib_printf("Arity of %b: %d\n", f, n);
  else sollya_lib_printf("%b is not a functional expression (n=%d. Expecting -1)\n", f, n);
  sollya_lib_clear_obj(f);

  sollya_lib_close();
  return 0;
}