Tutorials
Blog
About

Tutorials > Julia Programming: a Hands-on Tutorial

Writing and Running Tests

by Martin D. Maas, Ph.D
@MartinDMaas

Last updated: 2021-11-16

Introduction

Good programming practices put an enormous emphasis on testing. This page contains a basic example of the mechanics of setting up a Julia project with tests.

For convenience, Julia ships with the Test package, which automates much of the work required to define and run tests.

Example Project

For conciseness, let’s start a dummy project. Our example code will perform a basic computation:

$$ s = a_1 + a_2 + a_3 + \dots + a_{n+1} $$

where

$$ a_i = (a_1 + (i-1)\Delta) $$

by resorting to the formula

$$ s = \frac{n(a_1 + a_{n+1})}{2} $$

So, after creating a new project as detailed in the previous section, let’s modify the MyProject.jl file:

# src/MyProject.jl
module MyProject

export ArithmeticSum

ArithmeticSum(a₁,Δ,n) = return (n+1)*(a₁ + (a₁+n*Δ))/2

end

Writing Tests

Now let’s write some tests. A straightfoward way to test this simple routine is to sum the corresponding numbers one by one, for specific values of \( a_1, n \) and \( Δ \). We’ll implement this straightforward routine in a SlowSum function.

SlowSum(a₁,Δ,n) = sum([a₁+Δ*i for i ∈ 0:n])

Without further ado, let’s write our basic tests. Will resort to our SlowSum function, and the @test macro to evaluate that ArithmeticSum coincides with SlowSum in several test cases.

# tests/runtests.jl
using MyProject
using Test

SlowSum(a₁,Δ,n) = sum([a₁+Δ*i for i ∈ 0:n])

@testset "ArithmeticSum" begin
    @test ArithmeticSum(1,1,14) == SlowSum(1,1,14)
    @test ArithmeticSum(5,1,10) == SlowSum(5,1,10)
    @test ArithmeticSum(2,3,14) == SlowSum(2,3,14)
end

Running the Tests

Importantly, running the tests is performed from the pkg environment. To access the @test macro, we also need to add the Test package as a dependency of our project.

pkg > activate .
pkg > add Test
pkg > test MyProject

After which you should get a message saying that all 3 tests have passed.

Other Types of Tests

There are many types of tests we might want to conduct.

For example, as floating-point arithmetic introduces some errors, we might want to test for reasonably approximate computations. This can be done with the isaprox function, or by using the unicode character (\approx).

@test π ≈ 3.14 atol=0.01    
# Test Passed

If you want to learn more about testing, you can check the official documentation here.

Ask me a question or send me your comments!

Don't hesitate to ask me any question about the topics I cover on this blog!

Click here to reach out!