import { describe, expect, it } from '@jest/globals'; import { gcdIntBinary, gcdIntsTree } from '../../../src/gcd/double/integer-gcd.js'; import { scaleFloatToInt } from '../../../src/scale-to-int/scale-float-to-int.js'; import { gcdInt, gcdInts } from '../../../src/gcd/double/integer-gcd.js'; describe('integer gcd', function() { it('should calculate the correct integer gcds', function() { let a = 1071; let b = 462; let vals1: [number, number][] = [ [a,b],[-a,b],[a,-b],[-a,-b], [b,a],[-b,a],[b,-a],[-b,-a], ]; for (let val of vals1) { { let r = gcdInt(...val); expect(r).toEqual(21); } { let r = gcdIntBinary(...val); expect(r).toEqual(21); } { let r = gcdInts(val); expect(r).toEqual(21); } { let r = gcdIntsTree(val); expect(r).toEqual(21); } } let c = 21; let d = 7; let vals2: number[][] = [ [a,b,c,d], [d,c,b,a], [d,c,a,b] ]; for (let val of vals2) { { let r = gcdInts(val); expect(r).toEqual(7); } { let r = gcdIntsTree(val); expect(r).toEqual(7); } } // get lots of values let vals3: number[][] = []; for (let i=0; i<1000; i++) { let vals: number[] = []; for (let i=0; i<9; i++) { let v = scaleFloatToInt(Math.random()); if (Math.random() > 0.5) { v *= 2; } vals.push(v); } vals3.push(vals); } // Naive === Tree ? { for (let i=0; i