Skip to content

Commit a6bfe66

Browse files
author
Bernard Pietraga
committed
Add exercises 1 and 2 from chapter 14
1 parent faceb79 commit a6bfe66

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Exercises 1 from chapter 14.
2+
# Results from Macbook Pro Retina 15" 2012 running elixir 1.4
3+
4+
# elixir -r chain.ex -e "Chain.run(10)"
5+
{3383, "Result is 10"}
6+
7+
# elixir -r chain.ex -e "Chain.run(100)"
8+
{3595, "Result is 100"}
9+
10+
# elixir -r chain.ex -e "Chain.run(1_000)"
11+
{11614, "Result is 1000"}
12+
13+
# elixir -r chain.ex -e "Chain.run(10_000)"
14+
{89265, "Result is 10000"}
15+
16+
# elixir -r chain.ex -e "Chain.run(400_00)"
17+
{337519, "Result is 40000"}
18+
19+
# elixir --erl "+P 1000000" -r chain.ex -e "Chain.run(1_000_000)"
20+
{7283403, "Result is 1000000"}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
defmodule TwoProcessesSpawner do
2+
def receive_token(process) do
3+
receive do
4+
token ->
5+
send(process, token)
6+
end
7+
end
8+
9+
def generate_process(token) do
10+
spawn(TwoProcessesSpawner, :receive_token, [self()])
11+
|> send(token)
12+
13+
receive do
14+
response ->
15+
IO.inspect(response)
16+
end
17+
end
18+
19+
def run do
20+
generate_process(:fred)
21+
generate_process(:betty)
22+
end
23+
end
24+
25+
ExUnit.start
26+
27+
defmodule TwoProcessesSpawnerTest do
28+
use ExUnit.Case
29+
import ExUnit.CaptureIO
30+
31+
test "run used 5 times returns :fred" do
32+
io_string = """
33+
:fred
34+
:betty
35+
:fred
36+
:betty
37+
:fred
38+
:betty
39+
:fred
40+
:betty
41+
:fred
42+
:betty
43+
"""
44+
45+
result = capture_io fn ->
46+
Enum.each(1..5, fn(_n) -> TwoProcessesSpawner.run end)
47+
end
48+
49+
assert result == io_string
50+
end
51+
52+
53+
test "run used 10 times returns :fred" do
54+
io_string = """
55+
:fred
56+
:betty
57+
:fred
58+
:betty
59+
:fred
60+
:betty
61+
:fred
62+
:betty
63+
:fred
64+
:betty
65+
:fred
66+
:betty
67+
:fred
68+
:betty
69+
:fred
70+
:betty
71+
:fred
72+
:betty
73+
:fred
74+
:betty
75+
"""
76+
77+
result = capture_io fn ->
78+
Enum.each(1..10, fn(_n) -> TwoProcessesSpawner.run end)
79+
end
80+
81+
assert result == io_string
82+
end
83+
end

0 commit comments

Comments
 (0)