\Header{stopifnot}{Ensure the `Truth' of R Expressions}
\keyword{environment}{stopifnot}
\keyword{programming}{stopifnot}
\keyword{error}{stopifnot}
\begin{Description}\relax
If any of the expressions in \code{...} are not \code{\Link{all}}
\code{TRUE}, \code{\Link{stop}} is called, producing an error message
indicating the \emph{first} element of \code{...} which was not
true.\end{Description}
\begin{Usage}
\begin{verbatim}
stopifnot(...)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{...}] any number of (\code{\Link{logical}}) \R{} expressions
which should evaluate to \code{\Link{TRUE}}.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
\code{stopifnot(A, B)} is conceptually equivalent to
\code{\{ if(!all(A)) stop(...) ; if(!all(B)) stop(...) \}}.\end{Details}
\begin{Value}
(\code{\Link{NULL}} if all statements in \code{...} are \code{TRUE}.)\end{Value}
\begin{SeeAlso}\relax
\code{\Link{stop}}, \code{\Link{warning}}.\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
stopifnot(1 == 1, all.equal(pi, 3.14159265), 1 < 2) # all TRUE

m <- matrix(c(1,3,3,1), 2,2)
stopifnot(m == t(m), diag(m) == rep(1,2)) # all(.) |=>  TRUE

options(error = expression(NULL))# "disable stop(.)"  << Use with CARE! >>

stopifnot(all.equal(pi, 3.141593),  2 < 2, all(1:10 < 12), "a" < "b")
stopifnot(all.equal(pi, 3.1415927), 2 < 2, all(1:10 < 12), "a" < "b")

options(error = NULL)# revert to default error handler
\end{ExampleCode}
\end{Examples}

