summaryrefslogtreecommitdiff
path: root/testsuite/tests/programs/jl_defaults
diff options
context:
space:
mode:
authorDavid Terei <davidterei@gmail.com>2011-07-20 11:09:03 -0700
committerDavid Terei <davidterei@gmail.com>2011-07-20 11:26:35 -0700
commit16514f272fb42af6e9c7674a9bd6c9dce369231f (patch)
treee4f332b45fe65e2a7a2451be5674f887b42bf199 /testsuite/tests/programs/jl_defaults
parentebd422aed41048476aa61dd4c520d43becd78682 (diff)
downloadhaskell-16514f272fb42af6e9c7674a9bd6c9dce369231f.tar.gz
Move tests from tests/ghc-regress/* to just tests/*
Diffstat (limited to 'testsuite/tests/programs/jl_defaults')
-rw-r--r--testsuite/tests/programs/jl_defaults/Main.hs24
-rw-r--r--testsuite/tests/programs/jl_defaults/Makefile3
-rw-r--r--testsuite/tests/programs/jl_defaults/jl_defaults.stdin97
-rw-r--r--testsuite/tests/programs/jl_defaults/jl_defaults.stdout81
-rw-r--r--testsuite/tests/programs/jl_defaults/test.T6
5 files changed, 211 insertions, 0 deletions
diff --git a/testsuite/tests/programs/jl_defaults/Main.hs b/testsuite/tests/programs/jl_defaults/Main.hs
new file mode 100644
index 0000000000..7264c53c1e
--- /dev/null
+++ b/testsuite/tests/programs/jl_defaults/Main.hs
@@ -0,0 +1,24 @@
+d=25637784375346753+0158409406114519728029864689069987389733-25637784375346753
+
+cox(n)=foldr (\x(y)->128* y+x)0(n)
+de(n)=un(\x-> (x`mod`128,x `div`128),( ==0))n
+coll= un(\ zs->( take( 35)zs, drop(35)zs),(==""))
+pe(n,m)x=s(p( n`div`2,m)x) `mod`m --2323 -- john launchbury --
+p(n,m)x=if( n==0)then(1) else(if(even(n)) then(pe(n,m)x)else(po(n,m)x))
+po(n, m)x= (x*p( n-1,m) x)`mod` m
+un(f, p)n= if(p(n))then []else (let(a, b)=f(n)in(a:un(f,p)b))
+(g,s) =(\x ->x,\x->x*x) --v(f) t*g+172
+
+e=4998372704153806867349631861645896723396264061670520817438963311707989737197
+n=6133011105483442903214719346445720362447680717496623906453276570566830154479
+
+a=g
+ (concat.map(map(chr.fromIntegral).de.p(d,n).read).lines)
+main=interact
+ (unlines.map(show.p(e,n).cox.map(fromIntegral.ord)).coll)
+b=g
+--p::(Integer,Integer)->Integer->Integer
+default (Integer)
+-- 1.3
+ord = (fromEnum :: Char -> Int)
+chr = (toEnum :: Int -> Char)
diff --git a/testsuite/tests/programs/jl_defaults/Makefile b/testsuite/tests/programs/jl_defaults/Makefile
new file mode 100644
index 0000000000..9101fbd40a
--- /dev/null
+++ b/testsuite/tests/programs/jl_defaults/Makefile
@@ -0,0 +1,3 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
diff --git a/testsuite/tests/programs/jl_defaults/jl_defaults.stdin b/testsuite/tests/programs/jl_defaults/jl_defaults.stdin
new file mode 100644
index 0000000000..9f42b3cdaf
--- /dev/null
+++ b/testsuite/tests/programs/jl_defaults/jl_defaults.stdin
@@ -0,0 +1,97 @@
+module Main
+where
+
+import Rsa
+
+main = interact (decrypt 2036450659413645137870851576872812267542175329986469156678671505255564383842535488743101632280716717779536712424613501441720195827856504007305662157107
+ 5282760067491066073559694937813662322539426172665930660813609694132726350877)
+module Main
+where
+
+import Rsa
+
+main = interact (prompt . keys . lines)
+
+keys (x:y:xs) = makeKeys (read x) (read y)
+prompt ks = "\nEnter two random numbers on separate lines:\n" ++
+ case ks of
+ (n,e,d) -> "The numbers n, e, and d are:\n" ++
+ unlines (map show [n,e,d]) ++ "\n"
+
+
+
+
+module Main
+where
+
+import Rsa
+
+main = interact (encrypt 2036450659413645137870851576872812267542175329986469156678671505255564383842535488743101632280716717779536712424613501441720195827856504007305662157107
+
+ 387784473137902876992546516170169092918207676456888779623592396031349415024943784869634893342729620092877891356118467738167515879252473323905128540213)
+module Rsa (encrypt, decrypt, makeKeys)
+where
+
+
+encrypt, decrypt :: Integer -> Integer -> String -> String
+encrypt n e = unlines . map (show . power e n . code) . collect (size n)
+decrypt n d = concat . map (decode . power d n . read) . lines
+
+
+-------- Converting between Strings and Integers -----------
+
+code :: String -> Integer
+code = foldl accum 0
+ where accum x y = (128 * x) + fromIntegral (ord y)
+
+decode :: Integer -> String
+decode n = reverse (expand n)
+ where expand 0 = []
+ expand x = chr (fromIntegral (x `mod` 128)) : expand (x `div` 128)
+
+collect :: Int -> [a] -> [[a]]
+collect 0 xs = []
+collect n [] = []
+collect n xs = take n xs : collect n (drop n xs)
+
+size :: Integer -> Int
+size n = (length (show n) * 47) `div` 100 -- log_128 10 = 0.4745
+
+
+------- Constructing keys -------------------------
+
+makeKeys :: Integer -> Integer -> (Integer, Integer, Integer)
+makeKeys p' q' = (n, invert phi d, d)
+ where p = nextPrime p'
+ q = nextPrime q'
+ n = p*q
+ phi = (p-1)*(q-1)
+ d = nextPrime (p+q+1)
+
+nextPrime :: Integer -> Integer
+nextPrime a = head (filter prime [odd,odd+2..])
+ where odd | even a = a+1
+ | True = a
+ prime p = and [power (p-1) p x == 1 | x <- [3,5,7]]
+
+invert :: Integer -> Integer -> Integer
+invert n a = if e<0 then e+n else e
+ where e=iter n 0 a 1
+
+iter :: Integer -> Integer -> Integer -> Integer -> Integer
+iter g v 0 w = v
+iter g v h w = iter h w (g - fact * h) (v - fact * w)
+ where fact = g `div` h
+
+
+------- Fast exponentiation, mod m -----------------
+
+power :: Integer -> Integer -> Integer -> Integer
+power 0 m x = 1
+power n m x | even n = sqr (power (n `div` 2) m x) `mod` m
+ | True = (x * power (n-1) m x) `mod` m
+
+sqr :: Integer -> Integer
+sqr x = x * x
+
+
diff --git a/testsuite/tests/programs/jl_defaults/jl_defaults.stdout b/testsuite/tests/programs/jl_defaults/jl_defaults.stdout
new file mode 100644
index 0000000000..96af88d02a
--- /dev/null
+++ b/testsuite/tests/programs/jl_defaults/jl_defaults.stdout
@@ -0,0 +1,81 @@
+4920809715423652126833300223898584158049941072841886687495995700883334743100
+5432330858306872686500084883710596485987545962633593608556693314985929397278
+4339248871826075716689365252959383603865108452038731242628114027468386889392
+5093536091168354561903967261876376065518631989366599364453052968769674546808
+452255175131343471422777502400803159982075304884934452744062890985998925579
+5651794710074432381863213344353720104403137760112806914487431596242938363430
+3061160482336986047106286569124179361131165975312875785380225174897705056247
+3707532298830907015078026151401521396408816523701073885235911174226183847616
+1672527229229602085474445755878025438634885550315976736763448691537272636397
+2694095939000995014017603368080556297555174784041262508235371067342645255524
+374377465877617758578798366250540382775835183912685973484329204081752413108
+70670677534061236024006132424883477045800689401223889299851269113903609674
+4000628399955471904243661544397767048125987794908180173183625871229892876397
+4906565929095346836492941810877575932437495191179616117416632984168943509597
+5516346249998806624976191380102290469940913229929556365185124042458931748107
+3249082870923755215225394643296748590367123662573818411184222619514686103707
+1491720335558719705869091168528404980739494271046932349218229579321184830523
+1686737417317757855955298010512776238712753331633604323753903197890876799373
+1805585126801071079811419697627136537113089029403553023028612722432622665752
+3511736403324390887823438889080816442699457593665362088272279450694662350325
+3059090617697805984966883699385391457394972451765807015618308229682170754691
+1791469209415048698889701534711117102841920419919199191251466207775050401648
+4909486343080247382855393243376373590835553788279147318500120102235277324688
+6105584463845350869346463822943556344444743115967948397202046370564408862801
+3101811255702323827681538739391405240305979676311679950655332212164728286905
+502301603479002276983794250287799138413539671219594405716785181026407853070
+4358061173842713923727596635618515537510627182560600542063351264350418316626
+164453598598861572154717095227623488925677211321244997860334336257326798364
+4394558632435728786563083951771397684083785946746450795656358634203698441707
+6006851346698376668509905281824701381916163461685508740794674441125858788140
+3867538230503966184572683721734208947665221540440622466928061154772391187329
+5338109760830381076911983869920441650716477560575467116072876135764595748095
+3743970364360709692565346166809854918016520774549917187253761579957026935285
+5338885389104874014929439098775791103906923949376645756253431737471221283700
+2348178884706827085411484833459920161135814667852004573467265439960241493131
+5254623865012121523980274965685942704689624593023469438181719491186136936015
+3986275158016351977835439147155809957999996272270283467743293472532115583617
+526935137060210001028448464377173261084183239425747466381941443743544027195
+507273794051233348674698212476241189139986916720908541050194948680762996344
+1033556763489852311463603207019927285083136108137572596117745744242871916900
+3446795433667187698189441512959300936201773618507473942386709884930451135074
+545931880879424996206435364533933413676207664131244784634909342311706884452
+2795801327214218413435627230002144566845535290174353455844445456463875729434
+2931834269644667286282273161824736012205083677965116753449411073863166504357
+4321226293197008552166855291951448174194860947478057945983594070230611540335
+2915201550606214604494324179626096006121149723557886610883841340815238149840
+4811620416165033750799620419212417505145222669364398338747204968522878524911
+1466224263109815153902563034416239744965838185919402925858674448761002454779
+2438889162050605487686752760988810450126857080767315726495753536171323863054
+5998821980800057085636781495295707864684178467171746799651972228599139201266
+6089567412803075636381417941158119969114523106164962143432961423089887792292
+3050021010531468802113118367257671370659795560347299789117728278864278450131
+5945718375382831109423632944705128211793085885913633593861683167159528782591
+3026204398245236798354704986302023975861815145437855415245441815308415387953
+2676529366868155998394698157879317295826322813777929555458747920862958367966
+2510144819506913011833805684069407453087501420718601429525528464579648027945
+927261031293985730579168798603066378051891567746020053024936290977579745443
+5915344780625405584011111029616932649698677975010841120923573679748044000720
+3148048140163124147500328788647215500539594107393850553079025886755275538822
+2287692746592755607916955694183169908842703620578310343535165175569710544053
+1063693689244866698553354251617273211405432367453924577142357801317603990975
+3849377130782157501991218894503189735241973306948618262933858934701817306449
+4936383948961571782723042323182925874145007039724697967700967643799136008113
+1509617705803393270808477952473702864659023851066698294243357961717765168672
+5472216837765373996121128218666257320756026383617272333703957906641519754263
+4780254190063899712174761115854857641499167561602339838395636904013647414584
+5581514826041367626669555434100028158983453767987104047095662205070800757827
+5309252036506593340513508392734823467337429965923448711237185191264932184860
+4583433054186756079090681370045250784557808030067459137931281644720019191362
+5575463174094526452776738273855782291534405989081458614218391164048773471067
+5852605354443026555410261612196443374066160991330461866108439516671532034102
+1874394262755169898049882304381434185778432126556225514931962873197932483312
+788055637358938666586632974037948121627136430004899534614992989099047141460
+2622180375354647151274534995106977971178016843195527033965282744574806644939
+4796950796491327077781445701993257220109214573739662989797578674154036157406
+233413414192494514986495864446565635199384720742811236012866416296376677246
+2347993888467688740232778654271044706092005506762442826710421788460808408534
+91161250689328982701754090976033028590711392587459602281964712770783938325
+1819439705826650262304124492559936132802903570523631190847187428885890378612
+2856891250452648545493984485566790848211215232771965243626157791018496330646
+1757223836152519443955234766296600906372788951356756698651751141731568824792
diff --git a/testsuite/tests/programs/jl_defaults/test.T b/testsuite/tests/programs/jl_defaults/test.T
new file mode 100644
index 0000000000..0f6e4cbd69
--- /dev/null
+++ b/testsuite/tests/programs/jl_defaults/test.T
@@ -0,0 +1,6 @@
+
+test('jl_defaults',
+ [skip_if_fast, extra_clean(['Main.hi', 'Main.o'])],
+ multimod_compile_and_run,
+ ['Main', ''])
+