module AtCoder.Internal.Assert
(
runtimeAssert,
testIndex,
testInterval,
checkIndex,
errorIndex,
checkVertex,
errorVertex,
checkEdge,
errorEdge,
checkCustom,
errorCustom,
checkInterval,
errorInterval,
)
where
import GHC.Stack (HasCallStack)
{-# INLINE runtimeAssert #-}
runtimeAssert :: (HasCallStack) => Bool -> String -> ()
runtimeAssert :: HasCallStack => Bool -> String -> ()
runtimeAssert Bool
p String
s
| Bool
p = ()
| Bool
otherwise = String -> ()
forall a. HasCallStack => String -> a
error String
s
{-# INLINE testIndex #-}
testIndex :: (HasCallStack) => Int -> Int -> Bool
testIndex :: HasCallStack => Int -> Int -> Bool
testIndex Int
i Int
n = Int
0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
i Bool -> Bool -> Bool
&& Int
i Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
n
{-# INLINE testInterval #-}
testInterval :: Int -> Int -> Int -> Bool
testInterval :: Int -> Int -> Int -> Bool
testInterval Int
l Int
r Int
n = Int
0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
l Bool -> Bool -> Bool
&& Int
l Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
r Bool -> Bool -> Bool
&& Int
r Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
n
{-# INLINE checkIndex #-}
checkIndex :: (HasCallStack) => String -> Int -> Int -> ()
checkIndex :: HasCallStack => String -> Int -> Int -> ()
checkIndex String
funcName Int
i Int
n
| Int
0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
i Bool -> Bool -> Bool
&& Int
i Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
n = ()
| Bool
otherwise = String -> Int -> Int -> ()
forall a. HasCallStack => String -> Int -> Int -> a
errorIndex String
funcName Int
i Int
n
{-# INLINE errorIndex #-}
errorIndex :: (HasCallStack) => String -> Int -> Int -> a
errorIndex :: forall a. HasCallStack => String -> Int -> Int -> a
errorIndex String
funcName Int
i Int
n =
String -> a
forall a. HasCallStack => String -> a
error (String -> a) -> String -> a
forall a b. (a -> b) -> a -> b
$ String
funcName String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
": given invalid index `" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"` over length `" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"`"
{-# INLINE checkVertex #-}
checkVertex :: (HasCallStack) => String -> Int -> Int -> ()
checkVertex :: HasCallStack => String -> Int -> Int -> ()
checkVertex String
funcName Int
i Int
n
| Int
0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
i Bool -> Bool -> Bool
&& Int
i Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
n = ()
| Bool
otherwise = String -> Int -> Int -> ()
forall a. HasCallStack => String -> Int -> Int -> a
errorVertex String
funcName Int
i Int
n
{-# INLINE errorVertex #-}
errorVertex :: (HasCallStack) => String -> Int -> Int -> a
errorVertex :: forall a. HasCallStack => String -> Int -> Int -> a
errorVertex String
funcName Int
i Int
n =
String -> a
forall a. HasCallStack => String -> a
error (String -> a) -> String -> a
forall a b. (a -> b) -> a -> b
$ String
funcName String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
": given invalid vertex `" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"` over the number of vertices `" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"`"
{-# INLINE checkEdge #-}
checkEdge :: (HasCallStack) => String -> Int -> Int -> ()
checkEdge :: HasCallStack => String -> Int -> Int -> ()
checkEdge String
funcName Int
i Int
n
| Int
0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
i Bool -> Bool -> Bool
&& Int
i Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
n = ()
| Bool
otherwise = String -> Int -> Int -> ()
forall a. HasCallStack => String -> Int -> Int -> a
errorEdge String
funcName Int
i Int
n
{-# INLINE errorEdge #-}
errorEdge :: (HasCallStack) => String -> Int -> Int -> a
errorEdge :: forall a. HasCallStack => String -> Int -> Int -> a
errorEdge String
funcName Int
i Int
n =
String -> a
forall a. HasCallStack => String -> a
error (String -> a) -> String -> a
forall a b. (a -> b) -> a -> b
$ String
funcName String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
": given invalid edge index `" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"` over the number of edges `" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"`"
{-# INLINE checkCustom #-}
checkCustom :: (HasCallStack) => String -> String -> Int -> String -> Int -> ()
checkCustom :: HasCallStack => String -> String -> Int -> String -> Int -> ()
checkCustom String
funcName String
indexName Int
i String
setName Int
n
| HasCallStack => Int -> Int -> Bool
Int -> Int -> Bool
testIndex Int
i Int
n = ()
| Bool
otherwise = String -> String -> Int -> String -> Int -> ()
forall a.
HasCallStack =>
String -> String -> Int -> String -> Int -> a
errorCustom String
funcName String
indexName Int
i String
setName Int
n
{-# INLINE errorCustom #-}
errorCustom :: (HasCallStack) => String -> String -> Int -> String -> Int -> a
errorCustom :: forall a.
HasCallStack =>
String -> String -> Int -> String -> Int -> a
errorCustom String
funcName String
indexName Int
i String
setName Int
n = String -> a
forall a. HasCallStack => String -> a
error (String -> a) -> String -> a
forall a b. (a -> b) -> a -> b
$ String
funcName String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
": given invalid " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
indexName String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" `" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"` over " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
setName String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" `" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"`"
{-# INLINE checkInterval #-}
checkInterval :: (HasCallStack) => String -> Int -> Int -> Int -> ()
checkInterval :: HasCallStack => String -> Int -> Int -> Int -> ()
checkInterval String
funcName Int
l Int
r Int
n
| Int -> Int -> Int -> Bool
testInterval Int
l Int
r Int
n = ()
| Bool
otherwise = String -> Int -> Int -> Int -> ()
forall a. HasCallStack => String -> Int -> Int -> Int -> a
errorInterval String
funcName Int
l Int
r Int
n
{-# INLINE errorInterval #-}
errorInterval :: (HasCallStack) => String -> Int -> Int -> Int -> a
errorInterval :: forall a. HasCallStack => String -> Int -> Int -> Int -> a
errorInterval String
funcName Int
l Int
r Int
n = String -> a
forall a. HasCallStack => String -> a
error (String -> a) -> String -> a
forall a b. (a -> b) -> a -> b
$ String
funcName String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
": given invalid interval `[" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
l String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
", " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
r String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")` over length `" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"`"