# 3.4. Step - 04 : Add implementation and pass¶

• `libmath.py`

The actual implementation.

```# libmath.py

class libMath(object):
def __init__(self):
self.num1 = 0
self.num2 = 0
self.value = 0

def doStoreNum1Num2(self, num1, num2):
self.num1 = num1
self.num2 = num2

self.value = self.num1 + self.num2

def getValue(self):
return self.value
```
• `features/simple-addition.feature` remains as is.

```# features/sample-addition.feature

Showcase simple addition for the BDD Book.

Scenario: Addition of single digit numbers
Given I have '1' and '3'
Then The result must be '4'

Scenario: Addition of double digit numbers
Given I have '70' and '29'
Then The result must be '99'
```
• `features/environment.py`

Let’s add a hook to create a new libMath object before each scenario.

```# environment.py

import libmath

def before_scenario(context, scenario):
""" Let's start with a new clean object before every test. """
context.math = libmath.libMath()
```
• `features/steps/steps_addition.py`

Calls the actual libMath for the expected behaviour

```# features/steps/steps_addition.py

from behave import given, when, then

@given(u"I have '{num1:d}' and '{num2:d}'")
def given_i_have(context, num1, num2):
context.math.doStoreNum1Num2(num1, num2)

@then(u"The result must be '{value:d}'")
def then_the_result_must_be(context, value):
actual_value = context.math.getValue()
assert value == actual_value, "Expected %d got %d"%(value, actual_value)

```

With above contents, if we run behave:

```behave  --no-timings --no-source
```

We can see that everything is successful:

```Feature: Simple Addition
Showcase simple addition for the BDD Book.
Scenario: Addition of single digit numbers
Given I have '1' and '3'