@@ -104,12 +104,14 @@ normalize3 as l = let s = sum l
104 probs = map (/ s) l
104 probs = map (/ s) l
105 in zip as probs
105 in zip as probs
107−randomDistF :: forall a b . (CoArbitrary a, Arbitrary b) => Gen (Dist' (a -> b))
107+randomDistF :: forall a b . (CountableDimensions a b, CoArbitrary a, Arbitrary b) => Gen (Dist' (a -> b))
108randomDistF = do
108randomDistF = do
109+ let a = fromInteger (natVal (Proxy :: Proxy (Count a)))
110+ b = fromInteger (natVal (Proxy :: Proxy (Count b)))
109− let size = 200
111+ size = a * b
110 l <- vectorOf size (arbitrary :: Gen Prob)
112 l <- vectorOf size (arbitrary :: Gen Prob)
111 l2 <- vectorOf size (arbitrary :: Gen (a -> b))
113 l2 <- vectorOf size (arbitrary :: Gen (a -> b))
112− let ln = normalize3 l2 (map P l)
114+ let !ln = normalize3 l2 (map P l)
113 return (D' ln)
115 return (D' ln)
115instance CoArbitrary (Natural a b)
117instance CoArbitrary (Natural a b)
@@ -134,11 +136,11 @@ setupEnv = do
135setupEnv2 = do
137setupEnv2 = do
136 m21 <- generate (resize 1 (randomMatrix @(Natural 0 100) @(Natural 0 100) ))
138 m21 <- generate (resize 1 (randomMatrix @(Natural 0 100) @(Natural 0 100) ))
137− m40 <- generate (resize 1 (randomMatrix @(Natural 0 300) @(Either (Natural 0 100) (Natural 0 100) )))
139+ m40 <- generate (resize 1 (randomMatrix @(Natural 0 100) @(Either (Natural 0 100) (Natural 0 100) )))
138− dist <- generate (resize 1 (randomDist @(Either (Natural 0 1000) (Natural 0 1000)) ))
140+ dist <- generate (resize 1 (randomDist @(Either (Natural 0 100) (Natural 0 100)) ))
139− dist2 <- generate (resize 1 (randomMatrix @(Natural 0 1000) @(Natural 0 1000) ))
141+ dist2 <- generate (resize 1 (randomMatrix @(Natural 0 100) @(Natural 0 100) ))
140− distList1 <- generate (resize 1 (randomDist2 @(Either (Natural 0 1000) (Natural 0 1000))))
142+ distList1 <- generate (resize 1 (randomDist2 @(Either (Natural 0 100) (Natural 0 100))))
141− distList2 <- generate (resize 1 (randomDistF @(Natural 0 1000) @(Natural 0 1000)))
143+ distList2 <- generate (resize 1 (randomDistF @(Natural 0 100) @(Natural 0 100)))
142 return (m21, m40, dist, dist2, distList1, distList2)
144 return (m21, m40, dist, dist2, distList1, distList2)
144benchmark :: IO ()
146benchmark :: IO ()
@@ -157,12 +159,12 @@ benchmark = defaultMain [
157 , bench "NF - 200x200" $ nf (comp m31) m32
159 , bench "NF - 200x200" $ nf (comp m31) m32
159 env setupEnv2 $ \ ~(m21, m40, dist, dist2, dl1, dl2) -> bgroup "Matrix vs List - `select`" [
161 env setupEnv2 $ \ ~(m21, m40, dist, dist2, dl1, dl2) -> bgroup "Matrix vs List - `select`" [
160− bgroup "Distribution" [
162+ bgroup "Distribution `select` - 100+100 / 100x100" [
161 bench "List Distribution - Applicative version" $ nf (select dl1) dl2
163 bench "List Distribution - Applicative version" $ nf (select dl1) dl2
162 , bench "Matrix Distribution - Applicative version" $ nf (selectD2 dist) dist2
164 , bench "Matrix Distribution - Applicative version" $ nf (selectD2 dist) dist2
163 , bench "Matrix Distribution - Selective version" $ nf (selectD dist) dist2
165 , bench "Matrix Distribution - Selective version" $ nf (selectD dist) dist2
165− bgroup "Matrix `select`" [
167+ bgroup "Matrix `select` - 100x(100+100) / 100x100" [
166 bench "Applicative version" $ nf (selectM2 m40) m21
168 bench "Applicative version" $ nf (selectM2 m40) m21
167 , bench "Selective version" $ nf (selectM m40) m21
169 , bench "Selective version" $ nf (selectM m40) m21