# ARC4 Types

These types are available under the `arc4` namespace. Refer to the [ARC4 specification](https://arc.algorand.foundation/ARCs/arc-0004) for more details on the spec.

```
Test execution context provides _value generators_ for ARC4 types. To access their _value generators_, use `{context_instance}.any.arc4` property. See more examples below.
```

```
For all `arc4` types with and without respective _value generator_, instantiation can be performed directly. If you have a suggestion for a new _value generator_ implementation, please open an issue in the [`algorand-typescript-testing`](https://github.com/algorandfoundation/algorand-typescript-testing) repository or contribute by following the [contribution guide](https://github.com/algorandfoundation/algorand-typescript-testing/blob/main/CONTRIBUTING).
```

```
import { arc4 } from '@algorandfoundation/algorand-typescript';

import { TestExecutionContext } from '@algorandfoundation/algorand-typescript-testing';

// Create the context manager for snippets below

const ctx = new TestExecutionContext();
```

## Unsigned Integers

```javascript
// Integer types

const uint8Value = new arc4.UintN8(255);

const uint16Value = new arc4.UintN16(65535);

const uint32Value = new arc4.UintN32(4294967295);

const uint64Value = new arc4.UintN64(18446744073709551615n);

// Generate a random unsigned arc4 integer with default range

const uint8 = ctx.any.arc4.uintN8();

const uint16 = ctx.any.arc4.uintN16();

const uint32 = ctx.any.arc4.uintN32();

const uint64 = ctx.any.arc4.uintN64();

const biguint128 = ctx.any.arc4.uintN128();

const biguint256 = ctx.any.arc4.uintN256();

const biguint512 = ctx.any.arc4.uintN512();

// Generate a random unsigned arc4 integer with specified range

const uint8Custom = ctx.any.arc4.uintN8(10, 100);

const uint16Custom = ctx.any.arc4.uintN16(1000, 5000);

const uint32Custom = ctx.any.arc4.uintN32(100000, 1000000);

const uint64Custom = ctx.any.arc4.uintN64(1000000000, 10000000000);

const biguint128Custom = ctx.any.arc4.uintN128(1000000000000000, 10000000000000000n);

const biguint256Custom = ctx.any.arc4.uintN256(

1000000000000000000000000n,

10000000000000000000000000n,

);

const biguint512Custom = ctx.any.arc4.uintN512(

10000000000000000000000000000000000n,

10000000000000000000000000000000000n,

);
```

## Address

```javascript
// Address type

const addressValue = new arc4.Address('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ');

// Generate a random address

const randomAddress = ctx.any.arc4.address();

// Access native underlaying type

const native = randomAddress.native;
```

## Dynamic Bytes

```javascript
// Dynamic byte string

const bytesValue = new arc4.DynamicBytes('Hello, Algorand!');

// Generate random dynamic bytes

const randomDynamicBytes = ctx.any.arc4.dynamicBytes(123); // n is the number of bits in the arc4 dynamic bytes
```

## String

```javascript
// UTF-8 encoded string

const stringValue = new arc4.Str('Hello, Algorand!');

// Generate random string

const randomString = ctx.any.arc4.str(12); // n is the number of bits in the arc4 string
```

```javascript
// test cleanup

ctx.reset();
```
