---
title: Statements
description: Statements control execution in the Flux functional data scripting language.
url: https://docs.influxdata.com/flux/v0/spec/statements/
estimated_tokens: 522
product: Flux
version: v0
publisher: InfluxData
canonical: https://docs.influxdata.com/flux/v0/spec/statements/
date: '2023-11-27T17:32:55+01:00'
lastmod: '2023-11-27T17:32:55+01:00'
---

A *statement* controls execution.

```js
Statement      = [ Attributes ] StatementInner .
StatementInner = OptionAssignment
                | BuiltinStatement
                | VariableAssignment
                | ReturnStatement
                | ExpressionStatement
                | TestcaseStatement .
```

## Return statements

A terminating statement prevents execution of all statements that appear after it in the same block.
A return statement is a terminating statement.

```
ReturnStatement = "return" Expression .
```

## Expression statements

An *expression statement* is an expression where the computed value is discarded.

```
ExpressionStatement = Expression .
```

##### Examples of expression statements

```js
1 + 1
f()
a
```

#### Testcase statements

A *testcase* statement defines a test case.

> [!Note]
> Testcase statements only work within the context of a Flux development environment.

```js
TestcaseStatement = "testcase" identifier [ TestcaseExtention ] Block .
TestcaseExtention = "extends" string_lit
```

Test cases are defined as a set of statements with special scoping rules.
Each test case statement in a file is considered to be its own main package.
In effect, all statements in package scope and all statements contained within
the test case statement are flattened into a single main package and executed.
Use the `testing` package from the standard library to control the pass failure
of the test case.

Test extension augments an existing test case with more statements or attributes.
A special function call, `super()`, must be made inside the body of a test case
extension. All statements from the parent test case will be executed in its place.

##### Basic testcase for addition

```js
import "testing"

testcase addition {
    testing.assertEqualValues(got: 1 + 1, want: 2)
}
```

##### Example testcase extension to prevent feature regression

```js
@feature({vectorization: true})
testcase vector_addition extends "basics_test.addition" {
    super()
}
```

[Packages](/flux/v0/spec/packages/)[Side effects](/flux/v0/spec/side-effects/)
