Created
June 19, 2019 15:03
-
-
Save lhartikk/e0e1ea1c564d77a876e6ab764f3ea5d5 to your computer and use it in GitHub Desktop.
Revisions
-
lhartikk created this gist
Jun 19, 2019 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,45 @@ 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); } }) });