diff --git a/Algorithms.ts b/Algorithms.ts index 49c0e53..dbe2a68 100644 --- a/Algorithms.ts +++ b/Algorithms.ts @@ -21,6 +21,7 @@ Copyright (C) 2021 Matthew Ellison */ +import { SSL_OP_SSLEAY_080_CLIENT_DH_BUG } from "constants"; import { InvalidResult } from "./InvalidResult"; @@ -387,3 +388,34 @@ export function getFactorsBig(goalNumber: bigint): bigint[]{ //Return the list of factors return factors; } + +export function getSum(ary: number[]): number{ + let sum: number = 0; + ary.forEach(a => sum += a); + return sum; +} +export function getSumBig(ary: bigint[]): bigint{ + let sum: bigint = 0n; + ary.forEach(a => sum += a); + return sum; +} +export function getProd(ary: number[]): number{ + //Return 0 if the array is empty + if(ary.length == 0){ + return 0; + } + + let prod: number = 1; + ary.forEach(a => prod *= a); + return prod; +} +export function getProdBig(ary: bigint[]): bigint{ + //Return 0 if the array is empty + if(ary.length == 0){ + return 0n; + } + + let prod: bigint = 1n; + ary.forEach(a => prod *= a); + return prod; +} diff --git a/TestAlgorithms.ts b/TestAlgorithms.ts index df60f7a..dad1cb5 100644 --- a/TestAlgorithms.ts +++ b/TestAlgorithms.ts @@ -22,7 +22,9 @@ Copyright (C) 2021 Matthew Ellison import assert = require("assert"); -import { arrayEquals, getAllFib, getAllFibBig, getFactors, getFactorsBig, getPrimes, getPrimesBig, getNumPrimes, getNumPrimesBig, sqrtBig } from "./Algorithms"; +import { SSL_OP_SSLEAY_080_CLIENT_DH_BUG } from "constants"; +import { arrayEquals, getAllFib, getAllFibBig, getFactors, getFactorsBig, getPrimes, getPrimesBig, getNumPrimes, getNumPrimesBig, + sqrtBig, getSum, getSumBig, getProd, getProdBig } from "./Algorithms"; function testArrayEquals(){ @@ -163,11 +165,52 @@ function testGetFactors(){ let bigCorrectAnswer = [2n, 7n, 7n]; let bigNumber = 98n; let bigAnswer = getFactorsBig(bigNumber); - assert.ok(arrayEquals(answer, correctAnswer), "getFactors BigInt failed"); + assert.ok(arrayEquals(bigAnswer, bigCorrectAnswer), "getFactors BigInt failed"); console.log("getFactors passed"); } +function testGetSum(){ + //Test 1 + let correctAnswer: number = 0; + let numbers: number[] = []; + let answer: number = getSum(numbers); + assert.ok((correctAnswer == answer), "getSum number 1 failed"); + //Test 2 + correctAnswer = 118; + numbers = [2, 2, 3, 3, 4, 4, 100]; + answer = getSum(numbers); + assert.ok((correctAnswer == answer), "getSum number 2 failed"); + + //Test 3 + let bigCorrectAnswer: bigint = 118n; + let bigNumbers: bigint[] = [2n, 2n, 3n, 3n, 4n, 4n, 100n]; + let bigAnswer: bigint = getSumBig(bigNumbers); + assert.ok((bigCorrectAnswer == bigAnswer), "getSumBig failed"); + + console.log("getSum passed"); +} +function testGetProd(){ + //Test 1 + let correctAnswer: number = 0; + let numbers: number[] = []; + let answer: number = getProd(numbers); + assert.ok((correctAnswer == answer), "getProd number 1 failed"); + //Test 2 + correctAnswer = 57600; + numbers = [2, 2, 3, 3, 4, 4, 100]; + answer = getProd(numbers); + assert.ok((correctAnswer == answer), "getProd number 2 failed"); + + //Test 3 + let bigCorrectAnswer: bigint = 57600n; + let bigNumbers: bigint[] = [2n, 2n, 3n, 3n, 4n, 4n, 100n]; + let bigAnswer: bigint = getProdBig(bigNumbers); + assert.ok((bigCorrectAnswer == bigAnswer), "getProdBig failed"); + + console.log("getProd passed"); +} + //Run all of the tests testArrayEquals(); @@ -176,3 +219,5 @@ testGetAllFib(); testGetPrimes(); testGetNumPrimes(); testGetFactors(); +testGetSum(); +testGetProd();