Assertions: Difference between revisions

From Rosetta Code
Content added Content deleted
(added haskell)
Line 15: Line 15:
</lang>
</lang>
The procedure Assert propagates Assertion_Error when condition is false.
The procedure Assert propagates Assertion_Error when condition is false.

=={{header|ALGOL 68}}==
The "Revised Report on the Algorithmic Language - ALGOL 68" suggest that
ASSERT may be made available by a particular implementation, quote: "Pragmats may
... convey to the implementation some piece of information affecting some aspect
of the meaning of the program which is not defined by this Report,..."

Example given[http://www.xs4all.nl/~jmvdveer/report_4.html#92]:
INT a, b; read((a, b)) PR ASSERT a >= 0 & b > 0 PR;

This works with neither [[ELLA ALGOL 68]] nor [[ALGOL 68G]].

The standard alternative would be to implement the assertions
as an exception as per the '''[[Exceptions#ALGOL_68|Exceptions]]''' sample code.

=={{header|C}}==
=={{header|C}}==
<lang c>#include <assert.h>
<lang c>#include <assert.h>

Revision as of 08:10, 6 February 2009

Task
Assertions
You are encouraged to solve this task according to the task description, using any language you may know.

Assertions are a way of breaking out of code when there is an error or an unexpected input. Some languages throw exceptions and some treat it as a break point.

Show an assertion in your language by asserting that an integer variable is equal to 42.

Ada

Using pragma Assert: <lang ada> pragma Assert (A = 42, "Oops!"); </lang> The behavior of pragma is controlled by pragma Assertion_Policy. Another way is to use the predefined package Ada.Assertions: <lang ada> with Ada.Assertions; use Ada.Assertions; ... Assert (A = 42, "Oops!"); </lang> The procedure Assert propagates Assertion_Error when condition is false.

ALGOL 68

The "Revised Report on the Algorithmic Language - ALGOL 68" suggest that ASSERT may be made available by a particular implementation, quote: "Pragmats may ... convey to the implementation some piece of information affecting some aspect of the meaning of the program which is not defined by this Report,..."

Example given[1]:

INT a, b; read((a, b)) PR ASSERT a >= 0 & b > 0 PR;

This works with neither ELLA ALGOL 68 nor ALGOL 68G.

The standard alternative would be to implement the assertions as an exception as per the Exceptions sample code.

C

<lang c>#include <assert.h>

int main(){

  int a;
  /* ...input or change a here */
  assert(a == 42); /* aborts program when a is not 42 */
  return 0;

}</lang>

Haskell

<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</lang>

Java

<lang java5>public static void main(String[] args){

  int a;
  //...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 non-void expression

}</lang>

J

   assert n = 42

Modula-3

ASSERT is a pragma, that creates a run-time error if it returns FALSE. <lang modula3><*ASSERT a = 42*></lang>

Assertions can be ignored in the compiler by using the -a switch.

OCaml

<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 *)</lang>

Python

<lang python>a = 5

  1. ...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</lang>