xref: /aosp_15_r20/external/bc/tests/fuzzing/bc_inputs1/len.bc (revision 5a6e848804d15c18a0125914844ee4eb0bda4fcf)
1*5a6e8488SAndroid Build Coastguard Workerdefine fast_gcd(a, b) {
2*5a6e8488SAndroid Build Coastguard Worker
3*5a6e8488SAndroid Build Coastguard Worker	if (a == b) return a;
4*5a6e8488SAndroid Build Coastguard Worker	if (a > b) return fast_gcd(a - b, b)
5*5a6e8488SAndroid Build Coastguard Worker
6*5a6e8488SAndroid Build Coastguard Worker	return fast_gcd(a, b - a);
7*5a6e8488SAndroid Build Coastguard Worker}
8*5a6e8488SAndroid Build Coastguard Worker
9*5a6e8488SAndroid Build Coastguard Workerdefine void r_reduce(*r[]) {
10*5a6e8488SAndroid Build Coastguard Worker
11*5a6e8488SAndroid Build Coastguard Worker	auto g,s;
12*5a6e8488SAndroid Build Coastguard Worker
13*5a6e8488SAndroid Build Coastguard Worker	if (length(r[]) != 2) sqrt(-1);
14*5a6e8488SAndroid Build Coastguard Worker	if (scale(r[0])) 2^r[0];
15*5a6e8488SAndroid Build Coastguard Worker	if (scale(r[1])) 2^r[1];
16*5a6e8488SAndroid Build Coastguard Worker
17*5a6e8488SAndroid Build Coastguard Worker	if (r[0] >= 0 && r[1] >= 0) g = fast_gcd(r[0], r[1]);
18*5a6e8488SAndroid Build Coastguard Worker	else g = gcd(r[0], r[1]);
19*5a6e8488SAndroid Build Coastguard Worker
20*5a6e8488SAndroid Build Coastguard Worker	s = scale;
21*5a6e8488SAndroid Build Coastguard Worker	scale = 0;
22*5a6e8488SAndroid Build Coastguard Worker
23*5a6e8488SAndroid Build Coastguard Worker	r[0] /= g;
24*5a6e8488SAndroid Build Coastguard Worker	r[1] /= g;
25*5a6e8488SAndroid Build Coastguard Worker
26*5a6e8488SAndroid Build Coastguard Worker	scale = s;
27*5a6e8488SAndroid Build Coastguard Worker}
28*5a6e8488SAndroid Build Coastguard Worker
29*5a6e8488SAndroid Build Coastguard Workerdefine void r_init(*r[], a, b) {
30*5a6e8488SAndroid Build Coastguard Worker	r[0] = a;
31*5a6e8488SAndroid Build Coastguard Worker	r[1] = b;
32*5a6e8488SAndroid Build Coastguard Worker	r_reduce(r[]);
33*5a6e8488SAndroid Build Coastguard Worker}
34*5a6e8488SAndroid Build Coastguard Worker
35*5a6e8488SAndroid Build Coastguard Workerdefine void r_initi(*r[], i, a, b) {
36*5a6e8488SAndroid Build Coastguard Worker
37*5a6e8488SAndroid Build Coastguard Worker	length(r[]);
38*5a6e8488SAndroid Build Coastguard Worker
39*5a6e8488SAndroid Build Coastguard Worker	r[0] = i * b + a;
40*5a6e8488SAndroid Build Coastguard Worker	r[1] = b;
41*5a6e8488SAndroid Build Coastguard Worker
42*5a6e8488SAndroid Build Coastguard Worker	length(r[]);
43*5a6e8488SAndroid Build Coastguard Worker
44*5a6e8488SAndroid Build Coastguard Worker	r_reduce(r[]);
45*5a6e8488SAndroid Build Coastguard Worker}
46*5a6e8488SAndroid Build Coastguard Worker
47*5a6e8488SAndroid Build Coastguard Workerlength(a[])
48*5a6e8488SAndroid Build Coastguard Workerr_initi(a[], 5, 63, 94);
49