Assertions: Difference between revisions

40,030 bytes added ,  15 days ago
PascalABC.NET
(Added FreeBASIC)
(PascalABC.NET)
 
(80 intermediate revisions by 50 users not shown)
Line 9:
Show an assertion in your language by asserting that an integer variable is equal to '''42'''.
<br><br>
 
=={{header|11l}}==
{{trans|Python}}
 
<syntaxhighlight lang="11l">V a = 5
assert(a == 42)
assert(a == 42, ‘Error message’)</syntaxhighlight>
 
=={{header|68000 Assembly}}==
<syntaxhighlight lang="68000devpac">CMP.L #42,D0
BEQ continue
ILLEGAL ;causes an immediate jump to the illegal instruction vector.
continue:
; rest of program</syntaxhighlight>
 
=={{header|Ada}}==
Using pragma Assert:
<langsyntaxhighlight lang="ada">pragma Assert (A = 42, "Oops!");</langsyntaxhighlight>
The behavior of pragma is controlled by pragma Assertion_Policy. Another way is to use the predefined package Ada.Assertions:
<langsyntaxhighlight lang="ada">with Ada.Assertions; use Ada.Assertions;
...
Assert (A = 42, "Oops!");</langsyntaxhighlight>
The procedure Assert propagates Assertion_Error when condition is false.
Since Ada 2012 one may also specify preconditions and post-conditions for a subprogram.
<syntaxhighlight lang="ada">procedure Find_First
(List : in Array_Type;
Value : in Integer;
Found : out Boolean;
Position : out Positive) with
Depends => ((Found, Position) => (List, Value)),
Pre => (List'Length > 0),
Post =>
(if Found then Position in List'Range and then List (Position) = Value
else Position = List'Last);</syntaxhighlight>
The precondition identified with "Pre =>" is an assertion that the length of the parameter List must be greater than zero. The post-condition identified with "Post =>" asserts that, upon completion of the procedure, if Found is true then Position is a valid index value in List and the value at the array element List(Position) equals the value of the Value parameter. If Found is False then Position is set to the highest valid index value for List.
 
=={{header|Aime}}==
<langsyntaxhighlight lang="aime">integer x;
 
x = 41;
if (x != 42) {
error("x is not 42");
}</langsyntaxhighlight>
Executing the program will produce on standard error:
<pre>aime: assert: 5: x is not 42</pre>
Line 44 ⟶ 70:
 
In [[ELLA ALGOL 68]] the ASSERT is implemented as an operator in the ''environment'' prelude:
<langsyntaxhighlight lang="algol68">OP ASSERT = (VECTOR [] CHAR assertion,BOOL valid) VOID:
IF NOT valid
THEN type line on terminal(assertion);
terminal error( 661 {invalid assertion } )
FI;</langsyntaxhighlight>
And can be "USEd" as follows:
<langsyntaxhighlight lang="algol68">PROGRAM assertions CONTEXT VOID
USE standard,environment
BEGIN
Line 56 ⟶ 82:
"Oops!" ASSERT ( a = 42 )
END
FINISH</langsyntaxhighlight>
 
=={{header|ALGOL W}}==
Assertions were added to the 1972 version of Algol W. If the tested condition is false, the program terminates. In the following, the write does not get executed.
 
<langsyntaxhighlight lang="algolw">begin
integer a;
a := 43;
assert a = 42;
write( "this won't appear" )
end.</langsyntaxhighlight>
 
=={{header|Apex}}==
Asserts that the specified condition is true. If it is not, a fatal error is returned that causes code execution to halt.
<langsyntaxhighlight lang="apex">
String myStr = 'test;
System.assert(myStr == 'something else', 'Assertion Failed Message');
</syntaxhighlight>
</lang>
 
Asserts that the first two arguments are the same. If they are not, a fatal error is returned that causes code execution to halt.
<langsyntaxhighlight lang="apex">
Integer i = 5;
System.assertEquals(6, i, 'Expected 6, received ' + i);
</syntaxhighlight>
</lang>
 
Asserts that the first two arguments are different. If they are the same, a fatal error is returned that causes code execution to halt.
<langsyntaxhighlight lang="apex">
Integer i = 5;
System.assertNotEquals(5, i, 'Expected different value than ' + i);
</syntaxhighlight>
</lang>
 
'''You can’t catch an assertion failure using a try/catch block even though it is logged as an exception.'''
 
=={{header|Arturo}}==
<syntaxhighlight lang="rebol">a: 42
ensure [a = 42]</syntaxhighlight>
 
=={{header|AutoHotkey}}==
=== Exceptions ===
{{works with|AutoHotkey_L}}
<langsyntaxhighlight AHKlang="ahk">a := 42
Assert(a > 10)
Assert(a < 42) ; throws exception
Line 99 ⟶ 129:
If !bool
throw Exception("Expression false", -1)
}</langsyntaxhighlight>
=== Legacy versions ===
<langsyntaxhighlight AutoHotkeylang="autohotkey">if (a != 42)
{
OutputDebug, "a != 42" ; sends output to a debugger if connected
ListVars ; lists values of local and global variables
Pause ; pauses the script, use ExitApp to exit instead
}</langsyntaxhighlight>
 
=={{header|AWK}}==
 
AWK doesn't have a built-in assert statement. It could be simulated using a user-defined assert() function defined as below. The BEGIN section shows some examples of successful and failed "assertions".
 
<syntaxhighlight lang="awk">
BEGIN {
meaning = 6 * 7
assert(meaning == 42, "Integer mathematics failed")
assert(meaning == 42)
meaning = strtonum("42 also known as forty-two")
assert(meaning == 42, "Built-in function failed")
meaning = "42"
assert(meaning == 42, "Dynamic type conversion failed")
meaning = 6 * 9
assert(meaning == 42, "Ford Prefect's experiment failed")
print "That's all folks"
exit
}
 
# Errormsg is optional, displayed if assertion fails
function assert(cond, errormsg){
if (!cond) {
if (errormsg != "") print errormsg
exit 1
}
}
</syntaxhighlight>
 
The above example produces the output below, and sets the program's exit code to 1 (the default is 0)
<pre>
Ford Prefect's experiment failed
</pre>
 
=={{header|Axe}}==
<langsyntaxhighlight lang="axe">A=42??Returnʳ</langsyntaxhighlight>
 
=={{header|BBC BASIC}}==
==={{header|BaCon}}===
<lang bbcbasic> PROCassert(a% = 42)
<syntaxhighlight lang="qbasic">' Assertions
answer = assertion(42)
PRINT "The ultimate answer is indeed ", answer
 
PRINT "Now, expect a failure, unless NDEBUG defined at compile time"
answer = assertion(41)
PRINT answer
END
 
' Ensure the given number is the ultimate answer
FUNCTION assertion(NUMBER i)
 
' BaCon can easily be intimately integrated with C
USEH
#include <assert.h>
END USEH
 
' If the given expression is not true, abort the program
USEC
assert(i == 42);
END USEC
 
RETURN i
END FUNCTION</syntaxhighlight>
 
{{out}}
<pre>prompt$ bacon -q assertion.bac && ./assertion
Converting 'assertion.bac'... done, 24 lines were processed in 0.006 seconds.
Compiling 'assertion.bac'... cc -c assertion.bac.c
cc -o assertion assertion.bac.o -lbacon -lm
Done, program 'assertion' ready.
The ultimate answer is indeed 42
Now, expect a failure, unless NDEBUG defined at compile time
assertion: assertion.assertion.h:16: assertion: Assertion `i == 42' failed.
ERROR: signal ABORT received - internal error. Try to compile the program with TRAP LOCAL to find the cause.
 
prompt$ bacon -q -o '-DNDEBUG' assertion.bac && ./assertion
Converting 'assertion.bac'... done, 24 lines were processed in 0.003 seconds.
Compiling 'assertion.bac'... cc -DNDEBUG -c assertion.bac.c
cc -o assertion assertion.bac.o -lbacon -lm
Done, program 'assertion' ready.
The ultimate answer is indeed 42
Now, expect a failure, unless NDEBUG defined at compile time
41</pre>
 
==={{header|BASIC256}}===
{{works with|BASIC256|2.0.0.11}}
<syntaxhighlight lang="basic256">
subroutine assert (condition, message)
if not condition then print "ASSERTION FAIED: ";message: throwerror 1
end subroutine
 
call assert(1+1=2, "but I don't expect this assertion to fail"): rem Does not throw an error
rem call assert(1+1=3, "and rightly so"): rem Throws an error
</syntaxhighlight>
 
==={{header|BBC BASIC}}===
<syntaxhighlight lang="bbcbasic"> PROCassert(a% = 42)
END
DEF PROCassert(bool%)
IF NOT bool% THEN ERROR 100, "Assertion failed"
ENDPROC</langsyntaxhighlight>
 
=={{header|BQN}}==
 
BQN has a primitive for logical assertions called Assert(<code>!</code>).
 
Called with a single argument, it throws an error if its argument is not 1.
 
Called with a left argument, it prints the left argument, and then throws an error.
<pre> ! 2=3 # Failed
Error: Assertion error
at ! 2=3 # Failed
^
"hello" ! 2=3 # Failed
Error: hello
at "hello" ! 2=3 # Failed</pre>
 
=={{header|Brat}}==
<langsyntaxhighlight lang="brat">squish import :assert :assertions
 
assert_equal 42 42
assert_equal 13 42 #Raises an exception</langsyntaxhighlight>
 
=={{header|C}}==
<langsyntaxhighlight lang="c">#include <assert.h>
 
int main(){
Line 134 ⟶ 270:
 
return 0;
}</langsyntaxhighlight>
To turn off assertions, simply define the <tt>NDEBUG</tt> macro before where <tt><assert.h></tt> is included.
 
There is no mechanism to add a custom "message" with your assertion, like in other languages. However, there is a "trick" to do this, by simply logical-AND-ing your condition with a string constant message, like in the following. Since a string constant is guaranteed to be non-NULL (and hence evaluated as True), and since AND-ing with True is an identity operation for a boolean, it will not alter the behavior of the assertion, but it will get captured in the debug message that is printed:
<langsyntaxhighlight lang="c">assert(a == 42 && "Error message");</langsyntaxhighlight>
This trick only works with messages written directly in the source code (i.e. cannot be a variable or be computed), however, since the assertion message is captured by the macro at compile-time.
 
<!--Putting the languages together for once to avoid duplicating the passage.-->
=={{header|C sharp}}==
 
=={{header|C sharp|C#}} and {{header|Visual Basic .NET}}==
 
.NET provides the Debug.Assert and Trace.Assert methods, which notify TraceListener instances subscribed to the program's trace output if the specified condition is false. Both methods also have overloads that allow a specified string to be added to the default message of the assertion, which consists of "Assertion Failed" and a stack trace for the location of the assertion.
 
The behavior of a failed assertion is controlled by the listeners in the TraceListeners collection shared by the Debug and Trace classes. By default, the collection contains an instance of the DefaultTraceListener class, which uses functions in the Windows API that notify attached debuggers, if any. Additional behavior depends on the framework version that the application is running in:
 
* In .NET Core applications, if no debuggers are attached, failed Debug.Assert assertions for non-UI applications terminate the program and write the assertion message to the console, while failed Trace.Assert assertions do not affect execution. In this respect, a failed Debug assertion behaves similarly to an exception.
* In .NET Framework applications, for both types of assertions, a special instance of the Abort-Retry-Ignore message box containing the assertion message is displayed (even with a debugger attached). "Abort" terminates the program; "Retry" switches to the location of the assertion in source code if the application is running in a debugger, or, if none are attached, prompts to launch a just-in-time debugger; and "Ignore" continues execution past the assertion.
 
Calls to methods of the Debug class are only compiled when the DEBUG compiler constant is defined, and so are intended for asserting invariants in internal code that could only be broken because of logic errors. Calls to methods of the Trace class similarly require the TRACE constant, which, however, is defined by default for both debug and release builds in Visual Studio projects—trace assertions can thus be used for various logging purposes in production code.
 
<syntaxhighlight lang="csharp">using System.Diagnostics; // Debug and Trace are in this namespace.
 
static class Program
{
static void Main()
{
int a = 0;
 
Console.WriteLine("Before");
 
// Always hit.
Trace.Assert(a == 42, "Trace assertion failed");
 
Console.WriteLine("After Trace.Assert");
 
// Only hit in debug builds.
Debug.Assert(a == 42, "Debug assertion failed");
 
Console.WriteLine("After Debug.Assert");
}
}</syntaxhighlight>
 
<syntaxhighlight lang="vbnet">Imports System.Diagnostics
' Note: VB Visual Studio projects have System.Diagnostics imported by default,
' along with several other namespaces.
 
Module Program
Sub Main()
Dim a As Integer = 0
 
Console.WriteLine("Before")
 
' Always hit.
Trace.Assert(a = 42, "Trace assertion failed: The Answer was incorrect")
 
Console.WriteLine("After Trace.Assert")
 
' Only hit in debug builds.
Debug.Assert(a = 42, "Debug assertion failed: The Answer was incorrect")
 
Console.WriteLine("After Debug.Assert")
End Sub
End Module</syntaxhighlight>
 
{{out|note=for .NET Core debug builds when outside of a debugger}}
<pre>Before
After Trace.Assert
Assertion Failed
Debug assertion failed
 
at Program.Main() in FILENAME:line 21</pre>
 
{{out}}
In .NET Core applications, this is the output
* when a debugger is attached and is used to continue past both assertions when they fail, or
* in release builds of the program, where the call to Debug.Assert is removed and the Trace.Assert assertion is hit but has no visible effects.
 
In .NET Framework applications, assertions never show up in the console and so the output is this when a debugger or the "Ignore" option used to continue past the assertions.
 
<pre>Before
After Trace.Assert
After Debug.Assert</pre>
 
'''Displaying Trace assertions in console:'''
 
To "see" the Trace.Assert assertion, additional TraceListener instances must be subscribed by the program. In the .NET Framework, there are several built-in subclasses of TraceListener, including ConsoleTraceListener, which writes trace messages to the console. In .NET Core, these classes are available starting from .NET Core 3.0.
<lang csharp>using System.Diagnostics;
 
Subscribing an instance involves adding the following line to the beginning of Main() (with a semicolon in C#, of course ;)
Debug.Assert(a == 42);</lang>
<syntaxhighlight lang="vbnet">Trace.Listeners.Add(new ConsoleTraceListener())</syntaxhighlight>
 
=={{header|C++}}==
{{trans|C}}
<langsyntaxhighlight lang="cpp">#include <cassert> // assert.h also works
 
int main()
Line 158 ⟶ 371:
assert(a == 42); // Aborts program if a is not 42, unless the NDEBUG macro was defined
// when including <cassert>, in which case it has no effect
}</langsyntaxhighlight>
Note that assert does ''not'' get a <code>std::</code> prefix because it's a macro.
 
=={{header|Clojure}}==
<syntaxhighlight lang="clojure">
<lang Clojure>
(let [i 42]
(assert (= i 42)))
</syntaxhighlight>
</lang>
 
=={{header|Common Lisp}}==
<langsyntaxhighlight lang="lisp">(let ((x 42))
(assert (and (integerp x) (= 42 x)) (x)))</langsyntaxhighlight>
 
=={{header|Component Pascal}}==
Works with BlackBox Component Builder
<langsyntaxhighlight lang="oberon2">
MODULE Assertions;
VAR
Line 185 ⟶ 398:
 
Assertions.DoIt
</syntaxhighlight>
</lang>
Output:
<pre>
Line 206 ⟶ 419:
.data ARRAY 256 OF INTEGER elements
</pre>
 
=={{header|Crystal}}==
Crystal doesn't have an assert statement. the <code>spec</code> module provides a testing DSL, but a simple assert can be created with a function or macro.
 
<syntaxhighlight lang="ruby">class AssertionError < Exception
end
 
def assert(predicate : Bool, msg = "The asserted condition was false")
raise AssertionError.new(msg) unless predicate
end
 
assert(12 == 42, "It appears that 12 doesn't equal 42")</syntaxhighlight>
 
=={{header|D}}==
<langsyntaxhighlight lang="d">import std.exception: enforce;
 
int foo(in bool condition) pure nothrow
Line 243 ⟶ 468:
// There are some different versions of this lazy function.
enforce(x == 42, "x is not 42");
}</langsyntaxhighlight>
 
=={{header|Dart}}==
=== Assert ===
Dart supplies a class Expect that works similar to the Assert methods of Junit
<syntaxhighlight lang="javascript">
<lang d>main() {
main() {
var i = 42;
assert( i == 42 );
}
</syntaxhighlight>
 
=== Expect ===
Testing assertions can be done using the test and expect functions in the test package
<syntaxhighlight lang="d">import 'package:test/test.dart';
 
main() {
int i=42;
int j=41;
 
test('i equals 42?', (){
Expect.equals(42,i);
Expect. expect( i, equals(42,j) );
});
}</lang>
 
test('j equals 42?', (){
expect( j, equals(42) );
});
}</syntaxhighlight>
 
=={{header|Delphi}}==
 
<langsyntaxhighlight Delphilang="delphi">Assert(a = 42);</langsyntaxhighlight>
 
If an assertion fails, EAssertionFailed exception is raised.
Line 263 ⟶ 504:
The generation of assertion code can be disabled by compiler directive
 
<syntaxhighlight lang Delphi="delphi">{$ASSERTIONS OFF}</langsyntaxhighlight>
 
Here is a simple console demo app which raises and handles assertion exception:
 
<langsyntaxhighlight Delphilang="delphi">program TestAssert;
 
{$APPTYPE CONSOLE}
Line 287 ⟶ 528:
end;
Readln;
end.</langsyntaxhighlight>
 
=={{header|DWScript}}==
Simple assertion, with a custom (optional) message
<langsyntaxhighlight Delphilang="delphi">Assert(a = 42, 'Not 42!');</langsyntaxhighlight>
Other specialized assertions can be used in contracts, for instance this function check that the parameter (passed by reference ofr the purpose of illustration) is 42 when entering the function and when leaving the function
<langsyntaxhighlight Delphilang="delphi">procedure UniversalAnswer(var a : Integer);
require
a = 42;
Line 300 ⟶ 541:
ensure
a = 42;
end;</langsyntaxhighlight>
 
=={{header|Dyalect}}==
Dyalect has a built-in "assert" function:
 
<syntaxhighlight lang="dyalect">var x = 42
assert(42, x)</syntaxhighlight>
 
This function throws an exception if assertion fails.
 
=={{header|E}}==
Line 306 ⟶ 555:
E does not have the specific feature of assertions which may be disabled by a global option. But it does have a utility to throw an exception if a condition is false:
 
<langsyntaxhighlight lang="e">require(a == 42) # default message, "Required condition failed"
 
require(a == 42, "The Answer is Wrong.") # supplied message
 
require(a == 42, fn { `Off by ${a - 42}.` }) # computed only on failure</langsyntaxhighlight>
 
=={{header|EchoLisp}}==
<langsyntaxhighlight lang="lisp">
(assert (integer? 42)) → #t ;; success returns true
 
Line 323 ⟶ 572:
(assert (integer? 'quarante-deux) "☝️ expression must evaluate to the integer 42")
💥 error: ☝️ expression must evaluate to the integer 42 : assertion failed : (#integer? 'quarante-deux)
</syntaxhighlight>
</lang>
 
=={{header|ECL}}==
 
<syntaxhighlight lang="text">
ASSERT(a = 42,'A is not 42!',FAIL);</langsyntaxhighlight>
 
=={{header|Ecstasy}}==
Ecstasy assertions raise an exception on failure. The default <code>assert</code> statement raises an <code>IllegalState</code>, but there are a few varieties:
 
{| class="wikitable"
! statement !! exception class
|-
| <code>assert</code> || <code>IllegalState</code>
|-
| <code>assert:arg</code> || <code>IllegalArgument</code>
|-
| <code>assert:bounds</code> || <code>OutOfBounds</code>
|-
| <code>assert:TODO</code> || <code>NotImplemented</code>
|}
 
The above assertions are always evaluated when they are encountered in the code; in other words, assertions are always enabled. There are three additional forms that allow developers to alter this behavior:
 
{| class="wikitable"
! statement !! exception class
|-
| <code>assert:test</code> || Evaluate when in "test" mode, but never evaluate in production mode
|-
| <code>assert:once</code> || Evaluate the assertion only the first time it is encountered
|-
| <code>assert:rnd(</code><i>n</i><code>)</code> || Statistically sample, such that the assertion is evaluated 1 out of every <code>n</code> times that the assertion is encountered
|}
 
This example will always evalaute (and fail) the assertion:
 
<syntaxhighlight lang="ecstasy">
module test {
void run() {
Int x = 7;
assert x == 42;
}
}
</syntaxhighlight>
 
Note that the text of the assertion expression and the relevant values are both included in the exception message:
 
{{out}}
<pre>
x$ xec test
 
2024-04-24 17:29:23.427 Service "test" (id=1) at ^test (CallLaterRequest: native), fiber 4: Unhandled exception: IllegalState: "x == 42": x=7
at run() (test.x:4)
at ^test (CallLaterRequest: native)
</pre>
 
=={{header|Eiffel}}==
Line 336 ⟶ 634:
 
File called main.e:
<langsyntaxhighlight lang="eiffel">class MAIN
creation main
feature main is
Line 347 ⟶ 645:
test.assert(io.last_integer);
end
end</langsyntaxhighlight>
Another file called test.e:
<langsyntaxhighlight lang="eiffel">class TEST
feature assert(val: INTEGER) is
require
Line 356 ⟶ 654:
print("Thanks for the 42!%N");
end
end</langsyntaxhighlight>
 
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">ExUnit.start
 
defmodule AssertionTest do
Line 369 ⟶ 667:
assert 42 == return_5
end
end</langsyntaxhighlight>
 
{{out}}
Line 391 ⟶ 689:
 
=={{header|Emacs Lisp}}==
<syntaxhighlight lang="lisp">(require 'cl-lib)
Assertion can be loaded from cl.el:
<lang lisp>(require 'cl)
(let ((x 41))
(cl-assert (= x 42) t "theThis answer is notshouldn't righthappen"))</langsyntaxhighlight>
 
=={{header|Erlang}}==
Erlang doesn't have an assert statement. However, it is single assignment, and its assignment operator won't complain if you reassign the exact same value to an existing variable but will throw an exception otherwise.
<langsyntaxhighlight lang="erlang">1> N = 42.
42
2> N = 43.
Line 407 ⟶ 704:
** exception error: no match of right hand side value 42
5> 42 = N.
42</langsyntaxhighlight>
 
As such, the behavior of Erlang's assignment operator is extremely similar to a regular <tt>assert</tt> in other languages.
 
=={{header|Euphoria}}==
<langsyntaxhighlight lang="euphoria">type fourty_two(integer i)
return i = 42
end type
Line 418 ⟶ 715:
fourty_two i
 
i = 41 -- type-check failure</langsyntaxhighlight>
 
=={{header|F_Sharp|F#}}==
F# provides an ''assert'' function that is only enabled when the program is compiled with ''DEBUG'' defined. When an assertion fails, a dialog box is shown with the option to enter the debugger.
<syntaxhighlight lang="fsharp">let test x =
assert (x = 42)
 
test 43</syntaxhighlight>
 
For additional information about assertions in .NET, see [[#C# and Visual Basic .NET]]
 
=={{header|Factor}}==
Throw an exception if the value on the top of the stack is not equal to 42:
 
<langsyntaxhighlight lang="factor">USING: kernel ;
42 assert=</langsyntaxhighlight>
 
=={{header|FBSL}}==
Line 430 ⟶ 736:
 
This implementation evaluates the expression given to the function and displays a message if it evaluates to false.
<langsyntaxhighlight lang="qbasic">#APPTYPE CONSOLE
 
DECLARE asserter
Line 443 ⟶ 749:
Assert("1>2")
 
PAUSE</langsyntaxhighlight>
Output
<pre>Assertion: 1>2 failed
Line 450 ⟶ 756:
 
=={{header|Forth}}==
<langsyntaxhighlight lang="fsharp">variable a
: assert a @ 42 <> throw ;
 
41 a ! assert</langsyntaxhighlight>
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">' FB 1.05.0 Win64
' requires compilation with -g switch
 
Line 463 ⟶ 769:
'The rest of the code will not be executed
Print a
Sleep</langsyntaxhighlight>
 
{{out}}
Line 469 ⟶ 775:
assert.bas(5): assertion failed at __FB_MAINPROC__: a =6
</pre>
 
=={{header|F_Sharp|F#}}==
F# provides an ''assert'' function that is only enabled when the program is compiled with ''DEBUG'' defined. When an assertion fails, a dialog box is shown with the option to enter the debugger.
<lang fsharp>let test x =
assert (x = 42)
 
test 43</lang>
 
=={{header|GAP}}==
<langsyntaxhighlight lang="gap"># See section 7.5 of reference manual
 
# GAP has assertions levels. An assertion is tested if its level
Line 496 ⟶ 795:
# Show current global level
AssertionLevel();
# 10</langsyntaxhighlight>
 
=={{header|Go}}==
Assertions are a feature [http://golang.org/doc/go_faq.html#assertions consciously omitted] from Go. For cases where you want feedback during development, the following code should provide a similar purpose. While it is simply an if statement and a panic, the technique does have some properties typical of assertions. For one, the predicate of an if statement in Go is required to be of boolean type. Specifically, ints are not tacitly tested for zero, pointers are not tested for nil: the expression must be boolean, as the WP article mentions is typical of assertions. Also, it provides a good amount of information should the predicate evaluate to true. First, a value of any type can be passed to the panic, and by default is displayed, followed by a stack trace which includes the location of the panic in the source code&mdash;function name, file name, and line number.
<langsyntaxhighlight lang="go">package main
 
func main() {
Line 507 ⟶ 806:
panic(42)
}
}</langsyntaxhighlight>
Output:
<pre>
Line 524 ⟶ 823:
 
=={{header|Groovy}}==
<langsyntaxhighlight lang="groovy">def checkTheAnswer = {
assert it == 42 : "This: " + it + " is not the answer!"
}</langsyntaxhighlight>
 
Test program:
<langsyntaxhighlight lang="groovy">println "before 42..."
checkTheAnswer(42)
println "before 'Hello Universe'..."
checkTheAnswer("Hello Universe")</langsyntaxhighlight>
 
Output:
Line 542 ⟶ 841:
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">import Control.Exception
 
main = let a = someValue in
assert (a == 42) -- throws AssertionFailed when a is not 42
somethingElse -- what to return when a is 42</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
 
<syntaxhighlight lang="icon">...
<lang Icon>...
runerr(n,( expression ,"Assertion/error - message.")) # Throw (and possibly trap) an error number n if expression succeeds.
...
stop(( expression ,"Assertion/stop - message.")) # Terminate program if expression succeeds.
...</langsyntaxhighlight>
 
There are no 'assertions', which can be turned on/off by the compiler. We can emulate them by prefixing a stop statement with a check on a global variable:
 
<syntaxhighlight lang="icon">
<lang Icon>
$define DEBUG 1 # this allows the assertions to go through
 
Line 571 ⟶ 870:
check (12)
end
</syntaxhighlight>
</lang>
 
This produces the output:
Line 582 ⟶ 881:
 
=={{header|J}}==
<langsyntaxhighlight lang="j"> assert n = 42</langsyntaxhighlight>
 
=={{header|Java}}==
In Java, the <code>assert</code> keyword is used to place an assertive statement within the program.<br />
<lang java5>public static void main(String[] args){
A 'false' assertion will stop the program, as opposed to pausing, as with some other languages.<br />
int a;
It's worth noting that assertions were created specifically for the development and debugging of the program, and are not intended to be part of the control-flow.<br />
//...input or change a here
Some JVM implementations will have assertions disabled by default, so you'll have to enable them at the command line, switch '<tt>-ea</tt>' or '<tt>-enableassertions</tt>'.<br />
assert a == 42;//throws an AssertionError when a is not 42
Inversely, to disable them, use '<tt>-da</tt>', or '<tt>-disableassertions</tt>'.<br />
assert a == 42 : "Error message"; //throws an AssertionError
For more information see [https://docs.oracle.com/javase/8/docs/technotes/guides/language/assert.html Oracle - Programming With Assertions].<br /><br />
//when a is not 42 with "Error message" for the message
The <code>assert</code> syntax is as follows.
//the error message can be any non-void expression
<syntaxhighlight lang="java">
}</lang>
assert valueA == valueB;
Note: assertion checking is disabled by default when you run your program with the <tt>java</tt> command. You must provide the <tt>-ea</tt> (short for <tt>-enableassertions</tt>) flag in order to enable them.
</syntaxhighlight>
It is essentially a boolean expression, which if not met, will throw an <code>AssertionError</code> exception.<br />
It is effectively shorthand for the following code.
<syntaxhighlight lang="java">
if (valueA != valueB)
throw new AssertionError();
</syntaxhighlight>
You can also specify a <code>String</code> with the assertion, which will be used as the exception's detail-message, which is displayed with the stack-trace upon error.
<syntaxhighlight lang="java">
assert valueA == valueB : "valueA is not 42";
</syntaxhighlight>
<pre>
Exception in thread "main" java.lang.AssertionError: valueA is not 42
at Example.main(Example.java:5)
</pre>
You can also specify any other Object or primitive data type as a message.<br />
If it's an object, the <code>toString</code> method will be used as the message.
<syntaxhighlight lang="java">
assert valueA == valueB : valueA;
</syntaxhighlight>
 
=={{header|JavaScript}}==
<syntaxhighlight lang="javascript">
function check() {
try {
if (isNaN(answer)) throw '$answer is not a number';
if (answer != 42) throw '$answer is not 42';
}
catch(err) {
console.log(err);
answer = 42;
}
finally { console.log(answer); }
}
 
console.count('try'); // 1
let answer;
check();
 
console.count('try'); // 2
answer = 'fourty two';
check();
 
console.count('try'); // 3
answer = 23;
check();
</syntaxhighlight>
 
{{out}}<pre>
try: 1
$answer is not a number
42
 
try: 2
$answer is not a number
42
 
try: 3
$answer is not 42
42
</pre>
 
=={{header|jq}}==
{{works with|jq}}
'''Works with gojq, the Go implementation of jq'''
 
The assertion filters defined here are designed so that assertions
intended for development or testing could be left in-place, possibly
even in production code.
 
'''Highlights'''
 
* The input to every assertion filter is always passed through without alteration.
* If assertion checking is turned on, then an assertion violation
simply results in an error message being emitted on STDERR ("standard error").
* Assertions are only checked if the environment variable JQ_ASSERT
is set (see below for how to turn assertion checking on or off).
* Pinpointing the occurrence of an assertion violation by using $__loc__ is supported,
provided your implementation of jq includes this function.
 
The assertion checking filters defined here are as follows:
* assert(x)
* assert(x; msg)
* asserteq(x; y; msg)
<br>
where:
* msg determines the message that is printed as part of an assertion violation warning; it would typically be specified as a string or the $__loc__ object if your jq supports it.
<br>
'''JQ_ASSERT'''
 
Here is a table indicating how the JQ_ASSERT environment variable can be set or unset in various contexts:
<pre>
SHELL SET UNSET
sh bash (etc) export JQ_ASSERT=1 unset JQ_ASSERT
fish set -x JQ_ASSERT 1 set -u JQ_ASSERT
csh, tcsh setenv JQ_ASSERT 1 unsetenv JQ_ASSERT
 
Windows/DOS SET JQ_ASSERT=1 set JQ_ASSERT=
Windows: Start > Control Panel > System > Advanced > Environment Variables
</pre>
 
See also the example below for how to set it on a per-invocation basis.
 
'''assert.jq'''
<syntaxhighlight lang="jq">def assert(exp; $msg):
def m: $msg | if type == "string" then . else [.[]] | join(":") end;
if env.JQ_ASSERT then
(exp as $e | if $e then . else . as $in | "assertion violation @ \(m) => \($e)" | debug | $in end)
else . end;
 
def assert(exp):
if env.JQ_ASSERT then
(exp as $e | if $e then . else . as $in | "assertion violation: \($e)" | debug | $in end)
else . end;
 
def asserteq(x;y;$msg):
def m: $msg | if type == "string" then . else [.[]] | join(":") end;
def s: (if $msg then m + ": " else "" end) + "\(x) != \(y)";
if env.JQ_ASSERT then
if x == y then .
else . as $in | "assertion violation @ \(s)" | debug | $in
end
else . end;
</syntaxhighlight>
'''Example'''
<syntaxhighlight lang="jq">
# File: example.jq
# This example assumes the availability of the $__loc__ function
# and that assert.jq is in the same directory as example.jq.
 
include "assert" {search: "."};
 
def test:
"This is an input"
| 0 as $x
| assert($x == 42; $__loc__),
asserteq($x; 42; $__loc__);
 
test</syntaxhighlight>
'''Invocation'''
JQ_ASSERT=1 jq -n -f example.jq
 
In the output, the DEBUG line above appears on stderr.
{{out}}
<pre>
["DEBUG:","assertion violation @ <top-level>:16 => false"]
"This is an input"
["DEBUG:","assertion violation @ <top-level>:17: 0 != 42"]
"This is an input"
</pre>
 
=={{header|Julia}}==
<syntaxhighlight lang="julia">const x = 5
<lang julia>#assert() function takes expression as 1st argument, failed-assertion message as optional 2nd argument
julia> assert(x==42,"x is not 42")
# @assert macro checks the supplied conditional expression, with the expression
ERROR: assertion failed: x is not 42
#@assert macro checks the supplied conditional expression, with the expression returned in the failed-assertion message
julia> @assert x == 42
# ERROR: assertion failedLoadError: AssertionError:(( x == 42))
#Julia also has type assertions of the form, x::Type which can be appended to a variable for type-checking at any point
# Julia also has type assertions of the form, x::Type which can be appended to
julia> x::String
# variable for type-checking at any point
ERROR: type: typeassert: expected String, got Int32</lang>
x::String
# ERROR: LoadError: TypeError: in typeassert, expected String, got Int64
</syntaxhighlight>
 
=={{header|Kotlin}}==
Kotlin supports Jva-style assertions. These need to be enabled using java's -ea option for an <code>AssertionError</code> to be thrown when the condition is false. An assertion should generally never fire, and throws an <code>Error</code>. <code>Error</code>s are seldom used in Kotlin (and much less assertions), as they represent catastrophic issues with the program, such as classes failing to load. These are usually only ever raised by the JVM itself, rather than actual user code.
 
<syntaxhighlight lang="kotlin">fun main() {
val a = 42
assert(a == 43)
}</syntaxhighlight>
 
{{out}}
<pre>
Exception in thread "main" java.lang.AssertionError: Assertion failed
at AssertKt.main(assert.kt:5)
</pre>
 
A more Kotlin idiomatic approach to checks are the <code>require</code> (and <code>requireNotNull</code>) to check arguments, and the <code>check</code> (and <code>checkNotNull</code>), and <code>error</code> to check state. The former is mostly meant for checking input, and will throw <code>IllegalArgumentException</code>s, whereas the later is meant for state-checking, and will throw <code>IllegalStateException</code>s
 
<syntaxhighlight lang="kotlin">fun findName(names: Map<String, String>, firstName: String) {
require(names.isNotEmpty()) { "Please pass a non-empty names map" } // IllegalArgumentException
val lastName = requireNotNull(names[name]) { "names is expected to contain name" } // IllegalArgumentException
 
val fullName = "$firstName $lastName"
check(fullName.contains(" ")) { "fullname was expected to have a space...?" } // IllegalStateException
return fullName
}</syntaxhighlight>
 
=={{header|Lasso}}==
<langsyntaxhighlight lang="lasso">local(a) = 8
fail_if(
#a != 42,
error_code_runtimeAssertion,
error_msg_runtimeAssertion + ": #a is not 42"
)</langsyntaxhighlight>
{{out}}
<pre>-9945 Runtime assertion: #a is not 42</pre>
Line 620 ⟶ 1,097:
but we could break program if condition is not met.
We can even make it spell "AssertionFailed". In a way.
<syntaxhighlight lang="lb">
<lang lb>
a=42
call assert a=42
Line 635 ⟶ 1,112:
end if
end sub
</syntaxhighlight>
</lang>
 
{{out}}
Line 650 ⟶ 1,127:
=={{header|Lingo}}==
Lingo has no assert statement, but the abort command (that exits the full call stack) allows to implement something like it as global function:
<langsyntaxhighlight lang="lingo">-- in a movie script
on assert (ok, message)
if not ok then
Line 666 ⟶ 1,143:
assert(x=42, "Assertion 'x=42' failed")
put "this will never show up"
end</langsyntaxhighlight>
 
=={{header|Lisaac}}==
<langsyntaxhighlight Lisaaclang="lisaac">? { n = 42 };</langsyntaxhighlight>
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">a = 5
assert (a == 42)
assert (a == 42,'\''..a..'\' is not the answer to life, the universe, and everything')</langsyntaxhighlight>
 
=={{header|M2000 Interpreter}}==
M2000 use Error to produce error, Try variable {} and Try {} to capture errors, and return a number from a function when function called as module (zero means no error).
 
Trapping error may leave current stack of values with values so if we have above try {} a block of Stack New {} then we get old stack after exit of Stack New {} (this statement hold current stack, attach a new stack of value, and at the exit restore old stack). Another way is to use Flush which clear stack. Statement Flush Error clear all level of error information.
 
=====Making own logging for errors=====
<syntaxhighlight lang="m2000 interpreter">
Module Assert {
\\ This is a global object named Rec
Global Group Rec {
Private:
document doc$="Error List at "+date$(today)+" "+time$(now)+{
}
Public:
lastfilename$="noname.err"
Module Error(a$) {
if a$="" then exit
.doc$<=" "+a$+{
}
flush error
}
Module Reset {
Clear .doc$
}
Module Display {
Report .doc$
}
Module SaveIt {
.lastfilename$<=replace$("/", "-","Err"+date$(today)+str$(now, "-nn-mm")+".err")
Save.Doc .doc$,.lastfilename$
}
}
Module Checkit {
Function Error1 (x) {
if x<10 then Print "Normal" : exit
=130 ' error code
}
Call Error1(5)
Try ok {
Call Error1(100)
}
If not Ok then Rec.Error Error$ : Flush Error
Test "breakpoint A" ' open Control form, show code as executed, press next or close it
Try {
Test
Report "Run this"
Error "Hello"
Report "Not run this"
}
Rec.Error Error$
Module Error1 (x) {
if x<10 then Print "Normal" : exit
Error "Big Error"
}
Try ok {
Error1 100
}
If Error then Rec.Error Error$
}
Checkit
Rec.Display
Rec.SaveIt
win "notepad.exe", dir$+Rec.lastfilename$
}
Assert
</syntaxhighlight>
=====Using Assert Statement=====
Assert is a statement from 10th version (the previous example run because we can locally alter a statement using a module with same name).
 
When we run a program by applying a file gsb as argument the escape off statement applied by default. So asserts didn't work for programs. If we open the M2000 environment and then load a program, then the asserts work (or not if we use escape off). So this example can show x, from print x if we have x=10, but can show 0 if we run it with escape off statement.
 
<syntaxhighlight lang="m2000 interpreter">
// escape off // using escape off interpreter skip assert statements
x=random(0, 1)*10
try {
assert x=10
print x
}
</syntaxhighlight>
 
=={{header|Maple}}==
(Taken from Lua, above.)
<langsyntaxhighlight Maplelang="maple">a := 5:
ASSERT( a = 42 );
ASSERT( a = 42, "a is not the answer to life, the universe, and everything" );</langsyntaxhighlight>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
 
<langsyntaxhighlight Mathematicalang="mathematica">Assert[var===42]</langsyntaxhighlight>
 
=={{header|MATLAB}} / {{header|Octave}} ==
 
<langsyntaxhighlight MATLABlang="matlab">assert(x == 42,'x = %d, not 42.',x);</langsyntaxhighlight>
 
Sample Output:
<langsyntaxhighlight MATLABlang="matlab">x = 3;
assert(x == 42,'Assertion Failed: x = %d, not 42.',x);
??? Assertion Failed: x = 3, not 42.
</syntaxhighlight>
</lang>
 
=={{header|Metafont}}==
Line 700 ⟶ 1,260:
Metafont has no really an assert built in, but it can easily created:
 
<langsyntaxhighlight lang="metafont">def assert(expr t) = if not (t): errmessage("assertion failed") fi enddef;</langsyntaxhighlight>
 
This <code>assert</code> macro uses the <code>errmessage</code> built in to show the "error". The
Line 707 ⟶ 1,267:
Usage example:
 
<langsyntaxhighlight lang="metafont">n := 41;
assert(n=42);
message "ok";</langsyntaxhighlight>
 
Output (failed assertion):
Line 724 ⟶ 1,284:
=={{header|Modula-3}}==
<code>ASSERT</code> is a pragma, that creates a run-time error if it returns <code>FALSE</code>.
<langsyntaxhighlight lang="modula3"><*ASSERT a = 42*></langsyntaxhighlight>
 
Assertions can be ignored in the compiler by using the <code>-a</code> switch.
 
=={{header|Nanoquery}}==
<syntaxhighlight lang="nanoquery">a = 5
assert (a = 42)</syntaxhighlight>
 
=={{header|Nemerle}}==
A basic assertion uses the <tt>assert</tt> keyword:
<langsyntaxhighlight Nemerlelang="nemerle">assert (foo == 42, $"foo == $foo, not 42.")</langsyntaxhighlight>
Assertion violations throw an <tt>AssertionException</tt> with the line number where the assertion failed and the message provided as the second parameter to assert.
 
Nemerle also provides macros in the <tt>Nemerle.Assertions</tt> namespace to support preconditions, postconditions and class invariants:
<langsyntaxhighlight Nemerlelang="nemerle">using Nemerle.Assertions;
 
class SampleClass
Line 746 ⟶ 1,310:
ensures value.Length > 0 // ensures keyword indicates postcondition
{ ... } // value is a special symbol that indicates the method's return value
}</langsyntaxhighlight>
The design by contract macros throw <tt>Nemerle.AssertionException</tt>'s unless another Exception is specified using the <tt>otherwise</tt> keyword after the <tt>requires/ensures</tt> statement.
For further details on design by contract macros, see [http://nemerle.org/wiki/index.php?title=Design_by_contract_macros here].
 
 
=={{header|NGS}}==
Assertions in NGS follow the general design of the language: return the original value, use patterns.
 
In the examples below, wherever 42 is a parameter by itself:
 
* better exception with expected and actual value is produced
* it is a pattern, numbers match themselves exactly, other patterns that would match: <tt>Int</tt>, <tt>0..100</tt>, <tt>Any</tt>
 
<syntaxhighlight lang="ngs">a = 42
 
assert(a==42)
assert(a, 42)
assert(a==42, "Not 42!")
assert(a, 42, "Not 42!")</syntaxhighlight>
 
=={{header|Nim}}==
In Nim there are two main ways to check assertions.
<lang Nim>var a = 42
<syntaxhighlight lang="nim">var a = 42
assert(a == 42)</lang>
assert(a == 42, "Not 42!")</syntaxhighlight>
Assertions may be disabled by compiling with --assertions:off.
This first kind of assertion may be disabled by compiling with --assertions:off or -d:danger.
<syntaxhighlight lang="nim">var a = 42
doAssert(a == 42, "Not 42!")</syntaxhighlight>
This second kind of assertion cannot be disabled.
 
=={{header|Nutt}}==
<syntaxhighlight lang="Nutt">
module main
 
demand 5==42
 
end
</syntaxhighlight>
 
=={{header|Oberon-2}}==
Oxford Oberon-2
<langsyntaxhighlight lang="oberon2">
MODULE Assertions;
VAR
Line 765 ⟶ 1,358:
ASSERT(a = 42);
END Assertions.
</syntaxhighlight>
</lang>
Output:
<pre>
Line 772 ⟶ 1,365:
called from MAIN
</pre>
 
=={{header|Objeck}}==
If variable is not equal to 42 a stack trace is generated and the program is halts.
<syntaxhighlight lang="objeck">class Test {
function : Main(args : String[]) ~ Nil {
if(args->Size() = 1) {
a := args[0]->ToInt();
Runtime->Assert(a = 42);
};
}
}
</syntaxhighlight>
 
=={{header|Objective-C}}==
For use within an Objective-C method:
<langsyntaxhighlight lang="objc">NSAssert(a == 42, @"Error message");</langsyntaxhighlight>
 
If you want to use formatting arguments, you need to use the assertion macro corresponding to your number of formatting arguments:
<langsyntaxhighlight lang="objc">NSAssert1(a == 42, @"a is not 42, a is actually %d", a); # has 1 formatting arg, so use NSAssert"1"</langsyntaxhighlight>
 
Within a regular C function you should use <code>NSCAssert</code> or <code>NSCAssert''N''</code> instead.
Line 785 ⟶ 1,390:
 
=={{header|OCaml}}==
<langsyntaxhighlight lang="ocaml">let a = get_some_value () in
assert (a = 42); (* throws Assert_failure when a is not 42 *)
(* evaluate stuff to return here when a is 42 *)</langsyntaxhighlight>
 
It is possible to compile with the parameter <code>-noassert</code> then the compiler won't compile the assertion checks.
Line 799 ⟶ 1,404:
If an assertion is ko (and if oforth is launched using --a), an exception is raised.
 
<langsyntaxhighlight Oforthlang="oforth">: testInteger(n, m)
assert: [ n isInteger ]
assert: [ n 42 == ]
 
System.Out "Assertions are ok, parameters are : " << n << ", " << m << cr ;</langsyntaxhighlight>
 
{{out}}
Line 812 ⟶ 1,417:
testInteger(42, 43)
Assertions are ok, parameters are : 42, 43
</pre>
 
=={{header|Ol}}==
<syntaxhighlight lang="scheme">
(define i 24)
 
(assert i ===> 42)
; or
(assert (= i 42))
</syntaxhighlight>
{{Out}}
<pre>
Welcome to Otus Lisp 2.1-2486-481fd919
type ',help' to help, ',quit' to end session.
> (define i 24)
;; Defined i
> (assert i ===> 42)
assertion error:
i must be 42
> (assert (= i 42))
assertion error:
(= i 42) is not a true
</pre>
 
Line 817 ⟶ 1,444:
Oz does not have an assert statement. But if different values are assigned to the same dataflow variable, an exception will be thrown (similar to Erlang).
 
<langsyntaxhighlight lang="oz">declare
proc {PrintNumber N}
N=42 %% assert
Line 824 ⟶ 1,451:
in
{PrintNumber 42} %% ok
{PrintNumber 11} %% throws </langsyntaxhighlight>
 
Output:
Line 839 ⟶ 1,466:
PARI can use any of the usual C methods for making assertions. GP has no built-in assertions.
{{trans|C}}
<langsyntaxhighlight Clang="c">#include <assert.h>
#include <pari/pari.h>
 
Line 849 ⟶ 1,476:
 
assert(equalis(a, 42)); /* Aborts program if a is not 42, unless the NDEBUG macro was defined */
}</langsyntaxhighlight>
 
More common is the use of <code>pari_err_BUG</code> in such cases:
<langsyntaxhighlight Clang="c">if (!equalis(a, 42)) pari_err_BUG("this_function_name (expected a = 42)");</langsyntaxhighlight>
 
=={{header|Pascal}}==
See [[Assertions#Delphi | Delphi]]
 
=={{header|PascalABC.NET}}==
Assert procedure works only in Debug mode. In Release all Assert calls are ignored. It is impossible to handle assertion exception.
 
<syntaxhighlight lang="delphi">
begin
var a := 3;
Assert(a = 3);
Assert(a = 4, 'Bad assert!');
end.
</syntaxhighlight>
 
 
 
=={{header|Perl}}==
While not exactly an assertion, a common Perl idiom is to use <code>or die</code> to throw an exception when a certain statement is false.
 
<langsyntaxhighlight lang="perl">print "Give me a number: ";
chomp(my $a = <>);
 
Line 868 ⟶ 1,508:
die "Error message\n" unless $a == 42;
die "Error message\n" if not $a == 42;
die "Error message\n" if $a != 42;</langsyntaxhighlight>
 
This idiom is typically used during file operations:
<langsyntaxhighlight lang="perl">open my $fh, '<', 'file'
or die "Cannot open file: $!\n"; # $! contains the error message from the last error</langsyntaxhighlight>
It is not needed whith the "autodie" pragma:
<langsyntaxhighlight lang="perl">use autodie;
open my $fh, '<', 'file'; # automatically throws an exception on failure</langsyntaxhighlight>
 
Some third-party modules provide other ways of using assertions in Perl:
<langsyntaxhighlight lang="perl">use Carp::Assert;
assert($a == 42);</langsyntaxhighlight>
 
There is also a number of ways to test assertions in test suites, for example:
<langsyntaxhighlight lang="perl">is $a, 42;
ok $a == 42;
cmp_ok $a, '==', 42, 'The answer should be 42';
# etc.</langsyntaxhighlight>
 
=={{header|Perl 6}}==
<lang perl6>my $a = (1..100).pick;
$a == 42 or die '$a ain\'t 42';</lang>
 
{{works with|pugs}}
''Note: This example uses an experimental feature, and does not work in the primary Perl 6 compiler, Rakudo.''
<lang perl6># with a (non-hygienic) macro
macro assert ($x) { "$x or die 'assertion failed: $x'" }
assert('$a == 42');</lang>
 
=={{header|Phix}}==
User defined types allow the value to be automatically tested whenever it changes, and
can be disabled using the "without type_check" directive:
<!--<syntaxhighlight lang="phix">(phixonline)-->
<lang Phix>type int42(object i)
<span style="color: #008080;">type</span> <span style="color: #000000;">int42</span><span style="color: #0000FF;">(</span><span style="color: #004080;">object</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">)</span>
return i=42
<span style="color: #008080;">return</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">42</span>
end type
<span style="color: #008080;">end</span> <span style="color: #008080;">type</span>
 
int42 i
<span style="color: #000000;">int42</span> <span style="color: #000000;">i</span>
 
i = 41 -- type-check failure</lang>
<span style="color: #000000;">i</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">41</span> <span style="color: #000080;font-style:italic;">-- type-check failure (desktop/Phix only)</span>
<!--</syntaxhighlight>-->
When a type check occurs, program execution halts and if the program was run from the
editor, it automatically jumps to the offending source file and line.
Line 917 ⟶ 1,549:
 
You can also use constants to reduce code output on release versions:
<!--<syntaxhighlight lang="phix">(phixonline)-->
<lang Phix>global constant DEBUG = 0 -- (or any other identifier name can be used)
<span style="color: #008080;">global</span> <span style="color: #008080;">constant</span> <span style="color: #000000;">DEBUG</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span> <span style="color: #000080;font-style:italic;">-- (or any other identifier name can be used)</span>
global procedure assert(integer flag, string msg)
<span style="color: #008080;">global</span> <span style="color: #008080;">procedure</span> <span style="color: #000000;">check</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">flag</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">string</span> <span style="color: #000000;">msg</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- see also assert() below</span>
if DEBUG then
<span style="color: #008080;">if</span> <span style="color: #000000;">DEBUG</span> <span style="color: #008080;">then</span>
if not flag then
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">flag</span> <span style="color: #008080;">then</span>
{} = message_box(msg,"failed assertion",MB_OK) -- or
<span style="color: #7060A8;">IupMessage</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"check failed"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">msg</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- or</span>
puts(1,msg) -- , and/or
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">msg</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- and/or</span>
crash(msg) -- crash/ex.err report -- or
<span style="color: #7060A8;">crash</span><span style="color: #0000FF;">(</span><span style="color: #000000;">msg</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- crash/ex.err report, or</span>
trace(1) -- start debugging
<span style="color: #008080;">trace</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- start debugging</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end function
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
 
assert(i=42,"i is not 42!!")</lang>
<span style="color: #000000;">check</span><span style="color: #0000FF;">(</span><span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">42</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"i is not 42!!"</span><span style="color: #0000FF;">)</span>
Note that while the body of assert() and the call to it are suppressed, the calculation
<!--</syntaxhighlight>-->
Note that while the body of check() and the call to it are suppressed, the calculation
of the expression (i=42) may still generate code; sometimes further improvements to the
compiler may be possible, sometimes the assertscalls may need "if DEBUG" around them. Also
note that, as things stand, the constants 42 and "i is not 42!!" will be created in the
executable file whatever DEBUG is set to, though again there is nothing to prevent the
Line 938 ⟶ 1,572:
 
Lastly, I find the following trivial idioms to be spectacularly effective in Phix, the
first line terminates with a divide by zero, whereas the second producesand athird slightlyproduce a more
slightly more user-friendly, and therefore potentially less developer-friendly message:
<!--<syntaxhighlight lang="phix">(phixonline)-->
<lang Phix>if i!=42 then ?9/0 end if
<span style="color: #008080;">if</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">42</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if i!=42 then crash("i is not 42!!") end if</lang>
<span style="color: #008080;">if</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">42</span> <span style="color: #008080;">then</span> <span style="color: #7060A8;">crash</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"i is not 42!!"</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
Again, if the application was run from Edita, on error it automatically jumps to the
<span style="color: #7060A8;">assert</span><span style="color: #0000FF;">(</span><span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">42</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"i is not 42!!"</span><span style="color: #0000FF;">)</span>
<!--</syntaxhighlight>-->
The assert statment is really just shorthand for the crash statement above it, except that
the error message is optional (defaults to "assertion failure").
Again, if the application was run from Edita/Edix, on error it automatically jumps to the
offending file and line.
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php"><?php
$a = 5
#...input or change $a here
assert($a == 42) # when $a is not 42, take appropriate actions,
# which is set by assert_options()
?></langsyntaxhighlight>
 
=={{header|Picat}}==
Picat does not have a built-in assertion feature; a simple implementation is shown below. Note that predicates and functions must be handled differently:
* predicates: using <code>call/n</code>
* functions: using <code>apply/n</code>
 
The predicate/function that is tested but be "escaped" by <code>$</code> in order to not be evaluated before the test.
<syntaxhighlight lang="picat">go =>
 
%
% Test predicates
%
S = "ablewasiereisawelba",
assert("test1",$is_palindrome(S)),
assert_failure("test2",$not is_palindrome(S)),
assert("test3",$member(1,1..10)),
assert_failure("test4",$member(1,1..10)), % bad test
nl,
 
%
% Test functions
%
assert("test5",$2+2,4),
assert_failure("test6",$2+2, 5),
 
assert("test7",$to_lowercase("PICAT"),"picat"),
assert_failure("test8",$sort([3,2,1]),[1,3,2]),
nl.
 
is_palindrome(S) =>
S == S.reverse().
 
% Test a predicate with call/1
assert(Name, A) =>
println(Name ++ ": " ++ cond(call(A), "ok", "not ok")).
assert_failure(Name, A) =>
println(Name ++ ": " ++ cond(not call(A), "ok", "not ok")).
 
% Test a function with apply/1
assert(Name, A, Expected) =>
println(Name ++ ": " ++ cond(apply(A) == Expected, "ok", "not ok")).
assert_failure(Name, A, Expected) =>
println(Name ++ ": " ++ cond(apply(A) != Expected , "ok", "not ok")).</syntaxhighlight>
 
{{out}}
<pre>test1: ok
test2: ok
test3: ok
test4: not ok
 
test5: ok
test6: ok
test7: ok
test8: ok</pre>
 
=={{header|PicoLisp}}==
The '[http://software-lab.de/doc/refA.html#assert assert]' function, in
combination with the tilde read macro, generates code only in debug mode:
<syntaxhighlight lang="picolisp">...
<lang PicoLisp>...
~(assert (= N 42)) # Exists only in debug mode
...</langsyntaxhighlight>
Other possibilities are either to break into an error handler:
<langsyntaxhighlight PicoLisplang="picolisp">(let N 41
(unless (= N 42) (quit "Incorrect N" N)) ) # 'quit' throws an error
41 -- Incorrect N
?</langsyntaxhighlight>
or to stop at a debug break point, allowing to continue with the program:
<langsyntaxhighlight PicoLisplang="picolisp">(let N 41
(unless (= N 42) (! setq N 42)) ) # '!' is a breakpoint
(setq N 42) # Manually fix the value
! # Hit ENTER to leave the breakpoint
-> 42</langsyntaxhighlight>
 
=={{header|PL/I}}==
<syntaxhighlight lang="text">
/* PL/I does not have an assert function as such, */
/* but it is something that can be implemented in */
Line 991 ⟶ 1,685:
 
assert(a, 42);
</syntaxhighlight>
</lang>
 
=={{header|Prolog}}==
{{works with|SWI Prolog}}
 
<langsyntaxhighlight lang="prolog">
test(A):-
assertion(A==42).
</syntaxhighlight>
</lang>
 
=={{header|PureBasic}}==
Line 1,006 ⟶ 1,700:
The Macro below will only be included in the code if is compiled in debug mode, if so it will test the condition and if it fails it will inform with the message defined by the programmer, the line where it happened and in which source code file.
 
<langsyntaxhighlight PureBasiclang="purebasic">Macro Assert(TEST,MSG="Assert: ")
CompilerIf #PB_Compiler_Debugger
If Not (TEST)
Line 1,013 ⟶ 1,707:
EndIf
CompilerEndIf
EndMacro</langsyntaxhighlight>
 
A implementation as defined above could be;
<syntaxhighlight lang="purebasic">A=42
<lang PureBasic>A=42
Assert(A=42,"Assert that A=42")
A=42-1
Assert(A=42)</langsyntaxhighlight>
Where the second test would fail resulting in a message to the programmer with cause (if given by programmer), code line & file.
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">a = 5
#...input or change a here
assert a == 42 # throws an AssertionError when a is not 42
assert a == 42, "Error message" # throws an AssertionError
# when a is not 42 with "Error message" for the message
# the error message can be any expression</langsyntaxhighlight>
It is possible to turn off assertions by running Python with the <tt>-O</tt> (optimizations) flag.
 
=={{header|QB64}}==
<syntaxhighlight lang="vb">$ASSERTS:CONSOLE
DO
a = INT(RND * 10)
b$ = myFunc$(a)
PRINT a, , b$
_LIMIT 3
LOOP UNTIL _KEYHIT
FUNCTION myFunc$ (value AS SINGLE)
_ASSERT value > 0, "Value cannot be zero"
_ASSERT value <= 10, "Value cannot exceed 10"
IF value > 1 THEN plural$ = "s"
myFunc$ = STRING$(value, "*") + STR$(value) + " star" + plural$ + " :-)"
END FUNCTION</syntaxhighlight>
 
=={{header|R}}==
<langsyntaxhighlight Rlang="r">stopifnot(a==42)</langsyntaxhighlight>
 
=={{header|Racket}}==
Line 1,038 ⟶ 1,750:
Racket has higher-order assertions known as ''contracts'' that can protect any values including functions and objects. Contracts are typically applied on the imports or exports of a module.
 
<langsyntaxhighlight Racketlang="racket">#lang racket
 
(define/contract x
Line 1,051 ⟶ 1,763:
(f 42) ; succeeds
(f "foo") ; contract error!
</syntaxhighlight>
</lang>
 
If typical assertion checking (i.e. error unless some boolean condition holds) is needed, that is also possible:
 
<langsyntaxhighlight Racketlang="racket">#lang racket
 
(define x 80)
(unless (= x 42)
(error "a is not 42")) ; will error
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
<syntaxhighlight lang="raku" line>my $a = (1..100).pick;
$a == 42 or die '$a ain\'t 42';</syntaxhighlight>
 
=={{header|REXX}}==
===version 1===
<lang REXX>/* REXX ***************************************************************
<syntaxhighlight lang="rexx">/* REXX ***************************************************************
* There's no assert feature in Rexx. That's how I'd implement it
* 10.08.2012 Walter Pachl
Line 1,086 ⟶ 1,804:
End
Return
Syntax: Say 'program terminated'</langsyntaxhighlight>
Output:
<pre>
Line 1,099 ⟶ 1,817:
program terminated
</pre>
 
===version 2===
Programming note: &nbsp; this simple version will work better when the &nbsp; '''ASSERT''' &nbsp; be on one line,
<br>and be without other REXX statements.
 
The clauses don't require parentheses, but are used here for clarity.
 
The &nbsp; '''ASSERT''' &nbsp; function could be programmed to '''exit''' as one of many
<br>possible actions. &nbsp; Here, it just returns to the next REXX statement after the
'''call assert'''.
<syntaxhighlight lang="rexx">/*REXX program implements a simple ASSERT function; the expression can be compound. */
a = 1 /*assign a value to the A variable.*/
b = -2 /* " " " " " B " */
gee = 7.00 /* " " " " " GEE " */
zee = 26 /* " " " " " ZEE " */
 
call assert (a = 1)
call assert (b > 0)
call assert (gee = 7)
call assert (zee = a & zee>b)
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
assert: if arg(1)=1 then return; parse value sourceline(sigl) with x; say
say '===== ASSERT failure in REXX line' sigl", the statement is:"; say '=====' x
say; return</syntaxhighlight>
{{out|output|text=&nbsp; when using the internal defaults:}}
<pre>
===== ASSERT failure in REXX line 8, the statement is:
===== call assert (b > 0)
 
 
===== ASSERT failure in REXX line 10, the statement is:
===== call assert (zee = a & zee>b)
</pre>
 
=={{header|Ring}}==
<syntaxhighlight lang="ring">
x = 42
assert( x = 42 )
assert( x = 100 )
</syntaxhighlight>
 
=={{header|RLaB}}==
RLaB does not have a special function to deal with assertions. The following workaround will do the trick:
 
<syntaxhighlight lang="rlab">
<lang RLaB>
// test if 'a' is 42, and if not stop the execution of the code and print
// some error message
Line 1,110 ⟶ 1,869:
stop("a is not 42 as expected, therefore I stop until this issue is resolved!");
}
</syntaxhighlight>
</lang>
 
=={{header|RingRPL}}==
There is no build-in assertion feature in RPL, but it can be easily programmed
<lang ring>
≪ '''IF''' SWAP '''THEN''' ABORT '''ELSE''' DROP '''END''' ≫ ''''ASSRT'''' STO ''( condition message -- message )''
x = 42
 
assert( x = 42 )
≪ 43 → a
assert( x = 100 )
≪ a 42 == "Not good" '''ASSRT'''
</lang>
"This won't happen"
≫ ≫ EVAL
{{out}}
<pre>
1: "Not good"
</pre>
 
=={{header|Ruby}}==
This uses test/unit from the standard library.
 
<langsyntaxhighlight lang="ruby">require "test/unit/assertions"
include Test::Unit::Assertions
 
Line 1,132 ⟶ 1,897:
# Ruby 1.9: e is a MiniTest::Assertion
puts e
end</langsyntaxhighlight>
 
Output: <pre><42> expected but was
Line 1,138 ⟶ 1,903:
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">
let x = 42;
assert!(x == 42);
assert_eq!(x, 42);
</syntaxhighlight>
</lang>
 
=={{header|Sather}}==
<langsyntaxhighlight lang="sather">class MAIN is
main is
i ::= 41;
Line 1,151 ⟶ 1,916:
-- ...
end;
end;</langsyntaxhighlight>
 
(The current GNU Sather compiler v1.2.3 I am using to test the code seems to ignore the assertion and no fatal error is raised, despite Sather should, see e.g. [http://www.gnu.org/software/sather/docs-1.2/tutorial/safety2208.html here]).
Line 1,157 ⟶ 1,922:
=={{header|Scala}}==
These two are the same thing, and are tagged <code>@elidable(ASSERTION)</code>:
<langsyntaxhighlight lang="scala">assert(a == 42)
assert(a == 42, "a isn't equal to 42")
assume(a == 42)
assume(a == 42, "a isn't equal to 42")</langsyntaxhighlight>
 
The next one does the same thing as above, but it is not tagged. Often used as a pre-condition
checker on class constructors.
<langsyntaxhighlight lang="scala">require(a == 42)
require(a == 42, "a isn't equal to 42")</langsyntaxhighlight>
 
This one checks a value and returns it for further use (here shown being printed). It
uses <code>assert</code>, which, as explained, gets tagged.
<langsyntaxhighlight lang="scala">println(a.ensuring(a == 42))
println(a.ensuring(a == 42, "a isn't equal to 42"))
println(a.ensuring(_ == 42))
println(a.ensuring(_ == 42, "a isn't equal to 42"))</langsyntaxhighlight>
 
=={{header|Scheme}}==
Line 1,178 ⟶ 1,943:
 
{{trans|Common Lisp}}
<langsyntaxhighlight lang="scheme">(let ((x 42))
(assert (and (integer? x) (= x 42))))</langsyntaxhighlight>
 
=={{header|SETL}}==
<syntaxhighlight lang="ada">assert( n = 42 );</syntaxhighlight>
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">var num = pick(0..100);
assert_eq(num, 42); # dies when "num" is not 42</langsyntaxhighlight>
{{out}}
<pre>
Line 1,190 ⟶ 1,958:
 
=={{header|Slate}}==
<langsyntaxhighlight lang="slate">load: 'src/lib/assert.slate'.
define: #n -> 7.
assert: n = 42 &description: 'That is not the Answer.'.</langsyntaxhighlight>
raises an <tt>AssertionFailed</tt> condition (an <tt>Error</tt>).
 
=={{header|Smalltalk}}==
<langsyntaxhighlight lang="smalltalk">foo := 41.
...
self assert: (foo == 42).</langsyntaxhighlight>
 
In TestCase and subclasses, a number of check methods are inherited; among them:
<langsyntaxhighlight lang="smalltalk">self assert: (... somethingMustEvaluateToTrue.. )
self should:[ some code ] raise: someException "ensures that an exception is raised</langsyntaxhighlight>
 
{{works with|Smalltalk/X}}
Object also implements assert:; these are evaluated dynamically, but can be disabled via a flag setting. Also the compiler can be instructed to ignore them for production code (which is not normally done; disabled instead by default):
<langsyntaxhighlight lang="smalltalk">self assert: (... somethingMustEvaluateToTrue.. ) "implemented in Object"</langsyntaxhighlight>
the implementation in Object raises an AssertionFailedError exception, which usually opens a debugger when in the IDE, but can be caught in deployed apps.
 
Line 1,214 ⟶ 1,982:
Assertions are analysed statically, before compilation or execution. They can appear in various places:
:inline in the code, either
<langsyntaxhighlight lang="ada">-# check X = 42;</langsyntaxhighlight>
::or
<langsyntaxhighlight lang="ada">-# assert X = 42;</langsyntaxhighlight>
:as a precondition on an operation:
<langsyntaxhighlight lang="ada">procedure P (X : in out Integer);
--# derives X from *;
--# pre X = 42;</langsyntaxhighlight>
:or as a postcondition on an operation:
<langsyntaxhighlight lang="ada">procedure P (X : in out Integer);
--# derives X from *;
--# post X = 42;</langsyntaxhighlight>
Example:
<langsyntaxhighlight lang="ada">X := 7;
--# check X = 42;</langsyntaxhighlight>
produces the following output:
<pre>H1: true .
Line 1,233 ⟶ 2,001:
C1: false .</pre>
which is an unprovable theorem that tells you that there is a guaranteed failure.
 
=={{header|Standard ML}}==
Using exceptions:
<syntaxhighlight lang="sml">fun assert cond =
if cond then () else raise Fail "assert"
 
val () = assert (x = 42)</syntaxhighlight>
 
=={{header|Stata}}==
Assertions in Stata are limited to checking a property on the observations of a dataset. See '''[http://www.stata.com/help.cgi?assert assert]''' in Stata help.
 
For instance, if a dataset contains two variables x, y, z, one can check if x<y for all data lines for which z>0, with:
 
<syntaxhighlight lang="stata">assert x<y if z>0</syntaxhighlight>
 
There is another command, '''[http://www.stata.com/help.cgi?confirm confirm]''', that can be used to check existence and type of program arguments or files. For instance, to check that the file titanium.dta exists:
 
<syntaxhighlight lang="stata">confirm file titanium.dta</syntaxhighlight>
 
If the file does not exist, an error is thrown with return code 601.
 
It's also possible to use '''[http://www.stata.com/help.cgi?error error]''' to throw an error if some condition is satisfied. However, this command can only print predefined error messages: it takes the error number as an argument. For instance:
 
<syntaxhighlight lang="stata">if (`n'==42) error 3
* Will print "no dataset in use"</syntaxhighlight>
 
To print a more sensible message, one would do instead:
 
<syntaxhighlight lang="stata">if (`n'==42) {
display as error "The correct answer is not 42."
exit 54
}</syntaxhighlight>
 
Then, if '''[http://www.stata.com/help.cgi?capture capture]''' is used to trap the error, the return code (here 54) can be retrieved in '''[http://www.stata.com/help.cgi?_variables _rc]'''.
 
=={{header|Swift}}==
<langsyntaxhighlight lang="swift">var a = 5
//...input or change a here
assert(a == 42) // aborts program when a is not 42
assert(a == 42, "Error message") // aborts program
// when a is not 42 with "Error message" for the message
// the error message must be a static string</langsyntaxhighlight>
In release mode assertion checks are turned off.
 
=={{header|Tcl}}==
{{tcllib|control}}
<langsyntaxhighlight lang="tcl">package require control
 
set x 5
control::assert {$x == 42}</langsyntaxhighlight>
Produces the output:
<pre>assertion failed: $x == 42</pre>
 
{{omit from|gnuplot}}
{{omit from|NSIS}}
 
=={{header|UNIX Shell}}==
{{works with|bash}}
Assertions are not builtin commands, but we can add a function easily.
<langsyntaxhighlight lang="bash">assert() {
if test ! $1; then
[[ $2 ]] && echo "$2" >&2
Line 1,268 ⟶ 2,068:
((x--))
assert "$x -eq 42" "that's not the answer"
echo "won't get here"</langsyntaxhighlight>
 
=={{header|Vala}}==
<langsyntaxhighlight lang="vala">int a = 42;
int b = 33;
assert (a == 42);
assert (b == 42); // will break the program with "assertion failed" error</syntaxhighlight>
 
</lang>
=={{header|VBA}}==
<syntaxhighlight lang="vb">Sub test()
Dim a As Integer
a = 41
Debug.Assert a = 42
End Sub</syntaxhighlight>
{{out}}
When run in the development area executing halts and highlights with yellow background the debug.assert line.
 
=={{header|VBScript}}==
====Definition====
<langsyntaxhighlight lang="vb">sub Assert( boolExpr, strOnFail )
if not boolExpr then
Err.Raise vbObjectError + 99999, , strOnFail
end if
end sub
</syntaxhighlight>
</lang>
====Invocation====
<langsyntaxhighlight lang="vb">dim i
i = 43
Assert i=42, "There's got to be more to life than this!"</langsyntaxhighlight>
====Output====
<langsyntaxhighlight VBScriptlang="vbscript">>cscript "C:\foo\assert.vbs"
C:\foo\assert.vbs(3, 3) (null): There's got to be more to life than this!</langsyntaxhighlight>
 
=={{header|Visual Basic}}==
 
VB's <code>Assert</code> only fires when run from within the IDE. When compiled, all <code>Debug</code> lines are ignored.
<syntaxhighlight lang="vb">Debug.Assert i = 42</syntaxhighlight>
 
=={{header|Visual Basic .NET}}==
<lang vb>Debug.Assert i = 42</lang>
See [[#C# and Visual Basic .NET]].
 
=={{header|V (Vlang)}}==
<syntaxhighlight lang="ecmascript">fn main(){
x := 43
assert x == 43 // Fine
assert x > 42 // Fine
assert x == 42 // Fails
}</syntaxhighlight>
 
{{out}}
<pre>
../rosetta/assert.v:5: FAIL: fn main.main: assert x == 42
left value: x = 43
right value: 42
V panic: Assertion failed...
v hash: e42dc8e
C:~/assert.12166200709334891880.tmp.c:6356: at _v_panic: Backtrace
C:~/assert.12166200709334891880.tmp.c:11581: by main__main
C:~/assert.12166200709334891880.tmp.c:11946: by wmain
0044d2a8 : by ???
0044d40b : by ???
7ffc4cd07034 : by ???
 
</pre>
 
=={{header|Wren}}==
Wren does not have assertions as such though we can write something similar.
<syntaxhighlight lang="wren">var assertEnabled = true
 
var assert = Fn.new { |cond|
if (assertEnabled && !cond) Fiber.abort("Assertion failure")
}
 
var x = 42
assert.call(x == 42) // fine
assertEnabled = false
assert.call(x > 42) // no error
assertEnabled = true
assert.call(x > 42) // error</syntaxhighlight>
 
{{out}}
<pre>
$ wren assertion.wren
Assertion failure
[./assertion line 4] in new(_) block argument
[./assertion line 12] in (script)
</pre>
<br>
{{libheader|Wren-debug}}
The above module also provides limited support for assertions.
<syntaxhighlight lang="wren">import "./debug" for Debug
 
var x = 42
Debug.assert("x == 42", 4, x == 42) // fine
Debug.off
Debug.assert("x > 42", 6, x > 42) // no error
Debug.on
Debug.assert("x > 42", 8, x > 42) // error</syntaxhighlight>
 
{{out}}
<pre>
ASSERTION on line 8 labelled 'x > 42' failed. Aborting fiber.
Assertion failure.
[./debug line 100] in assert(_,_,_)
[./assert line 8] in (script)
</pre>
 
=={{header|XPL0}}==
Line 1,303 ⟶ 2,178:
synthesized something like this.
 
<langsyntaxhighlight XPL0lang="xpl0">proc Fatal(Str); \Display error message and terminate program
char Str;
[\return; uncomment this if "assertions" are to be disabled
Line 1,312 ⟶ 2,187:
];
 
if X#42 then Fatal("X#42");</langsyntaxhighlight>
 
=={{header|Yabasic}}==
<syntaxhighlight lang="yabasic">sub assert(a)
if not a then
error "Assertion failed"
end if
end sub
 
assert(myVar = 42)</syntaxhighlight>
 
=={{header|Zig}}==
<syntaxhighlight lang="zig">const assert = @import("std").debug.assert;
 
pub fn main() void {
const n: i64 = 43;
assert(n == 42); // On failure, an `unreachable` is reached
}</syntaxhighlight>
 
Zig's assert gives a stack trace for debugging on failure.
 
=={{header|Z80 Assembly}}==
 
There is no hardware support for error handling, but the programmer can do this the same way they would create any other <code>if</code> statement:
 
<syntaxhighlight lang="z80">ld a,(&C005) ;load A from memory (this is an arbitrary memory location designated as the home of our variable)
cp 42
jp nz,ErrorHandler</syntaxhighlight>
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">n:=42; (n==42) or throw(Exception.AssertionError);
n=41; (n==42) or throw(Exception.AssertionError("I wanted 42!"));</langsyntaxhighlight>
{{out}}
<pre>
Line 1,325 ⟶ 2,227:
Exception thrown: AssertionError(I wanted 42!)
</pre>
 
=={{header|zonnon}}==
<syntaxhighlight lang="zonnon">
module Assertions;
var
a: integer;
begin
a := 40;
assert(a = 42,100)
end Assertions.
</syntaxhighlight>
{{omit from|gnuplot}}
{{omit from|NSIS}}
46

edits