module AtCoder.Internal.Assert
(
runtimeAssert,
testIndex,
testInterval,
testIntervalBounded,
testPoint2d,
testRect,
testRectShape,
checkIndex,
errorIndex,
checkIndexBounded,
errorIndexBounded,
checkVertex,
errorVertex,
checkEdge,
errorEdge,
checkCustom,
errorCustom,
checkInterval,
errorInterval,
checkIntervalBounded,
errorIntervalBounded,
checkPoint2d,
errorPoint2d,
checkRect,
errorRect,
checkRectShape,
errorRectShape,
)
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 testIntervalBounded #-}
testIntervalBounded :: Int -> Int -> Int -> Int -> Bool
testIntervalBounded :: Int -> Int -> Int -> Int -> Bool
testIntervalBounded Int
l Int
r Int
l0 Int
r0 = Int
l0 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
r0
{-# INLINE testPoint2d #-}
testPoint2d :: (HasCallStack) => Int -> Int -> Int -> Int -> Bool
testPoint2d :: HasCallStack => Int -> Int -> Int -> Int -> Bool
testPoint2d Int
x Int
y Int
w Int
h = Int
0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
x Bool -> Bool -> Bool
&& Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
w Bool -> Bool -> Bool
&& Int
0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
y Bool -> Bool -> Bool
&& Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
h
{-# INLINE testRect #-}
testRect :: (HasCallStack) => Int -> Int -> Int -> Int -> Int -> Int -> Bool
testRect :: HasCallStack => Int -> Int -> Int -> Int -> Int -> Int -> Bool
testRect Int
x1 Int
x2 Int
y1 Int
y2 Int
w Int
h = Int
0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
x1 Bool -> Bool -> Bool
&& Int
x1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
x2 Bool -> Bool -> Bool
&& Int
x2 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
w Bool -> Bool -> Bool
&& Int
0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
y1 Bool -> Bool -> Bool
&& Int
y1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
y2 Bool -> Bool -> Bool
&& Int
y2 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
h
{-# INLINE testRectShape #-}
testRectShape :: (HasCallStack) => Int -> Int -> Int -> Int -> Bool
testRectShape :: HasCallStack => Int -> Int -> Int -> Int -> Bool
testRectShape Int
x1 Int
x2 Int
y1 Int
y2 = Int
x1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
x2 Bool -> Bool -> Bool
&& Int
y1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
y2
{-# 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 checkIndexBounded #-}
checkIndexBounded :: (HasCallStack) => String -> Int -> Int -> Int -> ()
checkIndexBounded :: HasCallStack => String -> Int -> Int -> Int -> ()
checkIndexBounded String
funcName Int
i Int
l Int
r
| Int
l 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
r = ()
| Bool
otherwise = String -> Int -> Int -> Int -> ()
forall a. HasCallStack => String -> Int -> Int -> Int -> a
errorIndexBounded String
funcName Int
i Int
l Int
r
{-# INLINE errorIndexBounded #-}
errorIndexBounded :: (HasCallStack) => String -> Int -> Int -> Int -> a
errorIndexBounded :: forall a. HasCallStack => String -> Int -> Int -> Int -> a
errorIndexBounded String
funcName Int
i Int
l Int
r =
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 bounds `[" 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
")`"
{-# 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
"`"
{-# INLINE checkIntervalBounded #-}
checkIntervalBounded :: (HasCallStack) => String -> Int -> Int -> Int -> Int -> ()
checkIntervalBounded :: HasCallStack => String -> Int -> Int -> Int -> Int -> ()
checkIntervalBounded String
funcName Int
l Int
r Int
l0 Int
r0
| Int -> Int -> Int -> Int -> Bool
testIntervalBounded Int
l Int
r Int
l0 Int
r0 = ()
| Bool
otherwise = String -> Int -> Int -> Int -> Int -> ()
forall a. HasCallStack => String -> Int -> Int -> Int -> Int -> a
errorIntervalBounded String
funcName Int
l Int
r Int
l0 Int
r0
{-# INLINE errorIntervalBounded #-}
errorIntervalBounded :: (HasCallStack) => String -> Int -> Int -> Int -> Int -> a
errorIntervalBounded :: forall a. HasCallStack => String -> Int -> Int -> Int -> Int -> a
errorIntervalBounded String
funcName Int
l Int
r Int
l0 Int
r0 = 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 bounds `[" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
l0 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
r0 String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")`"
{-# INLINE checkPoint2d #-}
checkPoint2d :: (HasCallStack) => String -> Int -> Int -> Int -> Int -> ()
checkPoint2d :: HasCallStack => String -> Int -> Int -> Int -> Int -> ()
checkPoint2d String
funcName Int
x Int
y Int
w Int
h
| HasCallStack => Int -> Int -> Int -> Int -> Bool
Int -> Int -> Int -> Int -> Bool
testPoint2d Int
x Int
y Int
w Int
h = ()
| Bool
otherwise = String -> Int -> Int -> Int -> Int -> ()
forall a. HasCallStack => String -> Int -> Int -> Int -> Int -> a
errorPoint2d String
funcName Int
x Int
y Int
w Int
h
{-# INLINE errorPoint2d #-}
errorPoint2d :: (HasCallStack) => String -> Int -> Int -> Int -> Int -> a
errorPoint2d :: forall a. HasCallStack => String -> Int -> Int -> Int -> Int -> a
errorPoint2d String
funcName Int
x Int
y Int
w Int
h =
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 point `(" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
x 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
y String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")` for rectangle `[0, " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
w String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
") x [0, " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
h String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")`"
{-# INLINE checkRect #-}
checkRect :: (HasCallStack) => String -> Int -> Int -> Int -> Int -> Int -> Int -> ()
checkRect :: HasCallStack =>
String -> Int -> Int -> Int -> Int -> Int -> Int -> ()
checkRect String
funcName Int
x1 Int
x2 Int
y1 Int
y2 Int
w Int
h
| HasCallStack => Int -> Int -> Int -> Int -> Int -> Int -> Bool
Int -> Int -> Int -> Int -> Int -> Int -> Bool
testRect Int
x1 Int
x2 Int
y1 Int
y2 Int
w Int
h = ()
| Bool
otherwise = String -> Int -> Int -> Int -> Int -> Int -> Int -> ()
forall a.
HasCallStack =>
String -> Int -> Int -> Int -> Int -> Int -> Int -> a
errorRect String
funcName Int
x1 Int
x2 Int
y1 Int
y2 Int
w Int
h
{-# INLINE errorRect #-}
errorRect :: (HasCallStack) => String -> Int -> Int -> Int -> Int -> Int -> Int -> a
errorRect :: forall a.
HasCallStack =>
String -> Int -> Int -> Int -> Int -> Int -> Int -> a
errorRect String
funcName Int
x1 Int
x2 Int
y1 Int
y2 Int
w Int
h =
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 rectangle `[" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
x1 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
x2 String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
") x [" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
y1 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
y2 String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")` for rectangle `[0, " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
w String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
") x [0, " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
h String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")`"
{-# INLINE checkRectShape #-}
checkRectShape :: (HasCallStack) => String -> Int -> Int -> Int -> Int -> ()
checkRectShape :: HasCallStack => String -> Int -> Int -> Int -> Int -> ()
checkRectShape String
funcName Int
x1 Int
x2 Int
y1 Int
y2
| HasCallStack => Int -> Int -> Int -> Int -> Bool
Int -> Int -> Int -> Int -> Bool
testRectShape Int
x1 Int
x2 Int
y1 Int
y2 = ()
| Bool
otherwise = String -> Int -> Int -> Int -> Int -> ()
forall a. HasCallStack => String -> Int -> Int -> Int -> Int -> a
errorRectShape String
funcName Int
x1 Int
x2 Int
y1 Int
y2
{-# INLINE errorRectShape #-}
errorRectShape :: (HasCallStack) => String -> Int -> Int -> Int -> Int -> a
errorRectShape :: forall a. HasCallStack => String -> Int -> Int -> Int -> Int -> a
errorRectShape String
funcName Int
x1 Int
x2 Int
y1 Int
y2 =
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 rectangle `[" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
x1 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
x2 String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
") x [" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
y1 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
y2 String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")`"