Created
June 19, 2019 15:03
-
-
Save lhartikk/e0e1ea1c564d77a876e6ab764f3ea5d5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var Prime = artifacts.require("./Prime.sol"); | |
contract('Prime', function (accounts) { | |
it('reports correctly primes and composited for miller-rabin test in base2', async function () { | |
const contract = await Prime.new(); | |
const isMillerRabin2Prime = (numberAsString) => contract.probablyPrime.call(numberAsString, '2') | |
// test for a simple prime | |
assert.equal(true, (await isMillerRabin2Prime('104729'))); | |
// although 2047 is not prime the algorithm should report it as prime since 2047 is a miller-rabin pseudoprime of base 2 | |
assert.equal(true, (await isMillerRabin2Prime('2047'))); | |
// test primality for large numbers | |
assert.equal(true, (await isMillerRabin2Prime('2147483647'))); | |
assert.equal(false, (await isMillerRabin2Prime('2147483649'))); | |
assert.equal(true, (await isMillerRabin2Prime('1111111111111111111'))); | |
assert.equal(false, (await isMillerRabin2Prime('1111111111111111113'))); | |
assert.equal(true, (await isMillerRabin2Prime('10888869450418352160768000001'))); | |
assert.equal(true, (await isMillerRabin2Prime('265252859812191058636308479999999'))); | |
assert.equal(true, (await isMillerRabin2Prime('8683317618811886495518194401279999999'))); | |
// cannot handle integers over 2^128 | |
try { | |
await isMillerRabin2Prime('3546245297457217493590449191748546458005595187661976371'); | |
assert.fail('error should have been thrown') | |
} | |
catch(e) { | |
} | |
// test that all primes and composites below 1000 are correctly reported | |
var test_primes = [ 2 ,3 ,5 ,7 ,11 ,13 ,17 ,19 ,23 ,29 ,31 ,37 ,41 ,43 ,47 ,53 ,59 ,61 ,67 ,71 ,73 ,79 ,83 ,89 ,97 ,101 ,103 ,107 ,109 ,113 ,127 ,131 ,137 ,139 ,149 ,151 ,157 ,163 ,167 ,173 ,179 ,181 ,191 ,193 ,197 ,199 ,211 ,223 ,227 ,229 ,233 ,239 ,241 ,251 ,257 ,263 ,269 ,271 ,277 ,281 ,283 ,293 ,307 ,311 ,313 ,317 ,331 ,337 ,347 ,349 ,353 ,359 ,367 ,373 ,379 ,383 ,389 ,397 ,401 ,409 ,419 ,421 ,431 ,433 ,439 ,443 ,449 ,457 ,461 ,463 ,467 ,479 ,487 ,491 ,499 ,503 ,509 ,521 ,523 ,541 ,547 ,557 ,563 ,569 ,571 ,577 ,587 ,593 ,599 ,601 ,607 ,613 ,617 ,619 ,631 ,641 ,643 ,647 ,653 ,659 ,661 ,673 ,677 ,683 ,691 ,701 ,709 ,719 ,727 ,733 ,739 ,743 ,751 ,757 ,761 ,769 ,773 ,787 ,797 ,809 ,811 ,821 ,823 ,827 ,829 ,839 ,853 ,857 ,859 ,863 ,877 ,881 ,883 ,887 ,907 ,911 ,919 ,929 ,937 ,941 ,947 ,953 ,967 ,971 ,977 ,983 ,991 ,997] | |
for(var i = 2; i < 1000; i++) { | |
const isPrime = test_primes.includes(i) | |
assert.equal(isPrime, (await isMillerRabin2Prime(i)), i); | |
} | |
}) | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment