picosat-0.1.6: test/RandomCNF.hs
module RandomCNF (randomLiteral,
randomClause,
randomCNF
) where
import System.Random
randomLiteral :: Int -> Double -> IO Int
randomLiteral num_vars negp =
do s <- randomRIO(0.0, 1.0)
let sign = if s < negp then -1 else 1
n <- randomRIO(1, num_vars)
return $ sign * n
randomClause :: Int -> Double -> Int -> IO [Int]
randomClause num_vars negp clause_size =
mapM (\_ -> randomLiteral num_vars negp) [1..clause_size]
randomCNF :: Int -> Double -> Int -> Int -> IO [[Int]]
randomCNF num_vars negp clause_size num_clauses =
mapM (\_ -> randomClause num_vars negp clause_size) [1..num_clauses]