valid inputs
properties of output
testing framework
Slide 14
Slide 14 text
github.com/whatyouhide/stream_data
Slide 15
Slide 15 text
example time:
sorting lists
Slide 16
Slide 16 text
test "sorting" do
assert sort([]) == []
assert sort([1, 2, 3]) == [1, 2, 3]
assert sort([2, 1, 3]) == [1, 2, 3]
end
Slide 17
Slide 17 text
lists of integers
Slide 18
Slide 18 text
it's a list
has the same elements
it's ordered
Slide 19
Slide 19 text
check all list <- list_of(int()) do
sorted = sort(list)
assert is_list(sorted)
assert same_elements?(list, sorted)
assert ordered?(sorted)
end
Slide 20
Slide 20 text
check all list <- list_of(int()) do
sorted = sort(list)
assert is_list(sorted)
assert same_elements?(list, sorted)
assert ordered?(sorted)
end
Slide 21
Slide 21 text
check all list <- list_of(int()) do
sorted = sort(list)
assert is_list(sorted)
assert same_elements?(list, sorted)
assert ordered?(sorted)
end
Slide 22
Slide 22 text
check all list <- list_of(int()) do
sorted = sort(list)
assert is_list(sorted)
assert same_elements?(list, sorted)
assert ordered?(sorted)
end
Slide 23
Slide 23 text
check all list <- list_of(int()) do
sorted = sort(list)
assert is_list(sorted)
assert same_elements?(list, sorted)
assert ordered?(sorted)
end
Slide 24
Slide 24 text
def sort(list), do: list
Slide 25
Slide 25 text
[32, 2, 44, -12]
[1, 0]
*shrinking
Slide 26
Slide 26 text
P A T T E R N S
Slide 27
Slide 27 text
circular code
Slide 28
Slide 28 text
decode(encode(term)) == term
Slide 29
Slide 29 text
property "encoding->decoding is circular" do
check all bin <- binary() do
encoded = Huffman.encode(bin)
assert is_binary(encoded)
assert Huffman.decode(encoded) == bin
end
end
Huffman encoding
Slide 30
Slide 30 text
oracle model
Slide 31
Slide 31 text
my_code() == oracle_code()
Slide 32
Slide 32 text
older system
less performant implementation
Slide 33
Slide 33 text
property "gives same results as Erlang impl" do
check all bin <- binary() do
assert Huffman.encode(bin) ==
:huffman.encode(bin)
end
end
https://www.youtube.com/watch?v=jvwfDdgg93E
property "only expected codes are returned" do
check all request <- request() do
response = HTTP.perform(request)
assert response.status in [200, 201, 400, 404]
end
end
Slide 37
Slide 37 text
locally , CI
Slide 38
Slide 38 text
if System.get_env("CI") == "true" do
config :stream_data, max_runs: 500
else
config :stream_data, max_runs: 25
end
property "splitting commands at random" do
check all cmd <- command(),
split_cmd <- random_splits(cmd) do
assert {:ok, _, ""} = parse_many(split_cmd)
end
end
Slide 44
Slide 44 text
property "splitting commands at random" do
check all cmd <- command(),
split_cmd <- random_splits(cmd) do
assert {:ok, _, ""} = parse_many(split_cmd)
end
end
Slide 45
Slide 45 text
property "splitting commands at random" do
check all cmd <- command(),
split_cmd <- random_splits(cmd) do
assert {:ok, _, ""} = parse_many(split_cmd)
end
end