Skip to content

Commit 011ad07

Browse files
author
José Valim
committed
Convert internal records to structs
1 parent e9d13d5 commit 011ad07

File tree

5 files changed

+56
-37
lines changed

5 files changed

+56
-37
lines changed

lib/elixir/lib/hash_dict.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ defmodule HashDict do
2121
@node_size 8
2222
@node_template :erlang.make_tuple(@node_size, [])
2323

24+
@opaque t :: map
2425
defstruct size: 0, root: @node_template
2526

2627
# Inline common instructions

lib/elixir/lib/hash_set.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ defmodule HashSet do
2121
@node_size 8
2222
@node_template :erlang.make_tuple(@node_size, [])
2323

24+
@opaque t :: map
2425
defstruct size: 0, root: @node_template
2526

2627
# Inline common instructions

lib/ex_unit/lib/ex_unit/cli_formatter.ex

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,16 @@ defmodule ExUnit.CLIFormatter do
1313

1414
def init(opts) do
1515
print_filters(Keyword.take(opts, [:include, :exclude]))
16-
{:ok, opts |> Config.new |> add_terminal_width}
16+
config = %{
17+
seed: opts[:seed],
18+
trace: opts[:trace],
19+
color: opts[:color],
20+
width: get_terminal_width(),
21+
tests_counter: 0,
22+
failures_counter: 0,
23+
invalids_counter: 0
24+
}
25+
{:ok, config}
1726
end
1827

1928
def handle_event({:suite_finished, run_us, load_us}, config) do
@@ -32,7 +41,7 @@ defmodule ExUnit.CLIFormatter do
3241
else
3342
IO.write success(".", config)
3443
end
35-
{:ok, config.update_tests_counter(&(&1 + 1))}
44+
{:ok, %{config | tests_counter: config.tests_counter + 1}}
3645
end
3746

3847
def handle_event({:test_finished, %ExUnit.Test{state: {:skip, _}} = test}, config) do
@@ -47,8 +56,8 @@ defmodule ExUnit.CLIFormatter do
4756
IO.write invalid("?", config)
4857
end
4958

50-
{:ok, config.update_tests_counter(&(&1 + 1))
51-
.update_invalids_counter(&(&1 + 1))}
59+
{:ok, %{config | tests_counter: config.tests_counter + 1,
60+
invalids_counter: config.invalids_counter + 1}}
5261
end
5362

5463
def handle_event({:test_finished, %ExUnit.Test{state: {:failed, failed}} = test}, config) do
@@ -60,8 +69,8 @@ defmodule ExUnit.CLIFormatter do
6069
config.width, &formatter(&1, &2, config))
6170
print_failure(formatted, config)
6271

63-
{:ok, config.update_tests_counter(&(&1 + 1))
64-
.update_failures_counter(&(&1 + 1))}
72+
{:ok, %{config | tests_counter: config.tests_counter + 1,
73+
failures_counter: config.failures_counter + 1}}
6574
end
6675

6776
def handle_event({:case_started, %ExUnit.TestCase{name: name}}, config) do
@@ -80,7 +89,7 @@ defmodule ExUnit.CLIFormatter do
8089
formatted = format_test_case_failure(test_case, failed, config.failures_counter + 1,
8190
config.width, &formatter(&1, &2, config))
8291
print_failure(formatted, config)
83-
{:ok, config.update_failures_counter(&(&1 + 1))}
92+
{:ok, %{config | failures_counter: config.failures_counter + 1}}
8493
end
8594

8695
def handle_event(_, config) do
@@ -160,7 +169,7 @@ defmodule ExUnit.CLIFormatter do
160169

161170
# Color styles
162171

163-
defp colorize(escape, string, Config[color: color]) do
172+
defp colorize(escape, string, %{color: color}) do
164173
IO.ANSI.escape_fragment("%{#{escape}}", color)
165174
<> string
166175
<> IO.ANSI.escape_fragment("%{reset}", color)
@@ -183,12 +192,10 @@ defmodule ExUnit.CLIFormatter do
183192
defp formatter(:location_info, msg, config), do: colorize("bright,black", msg, config)
184193
defp formatter(_, msg, _config), do: msg
185194

186-
defp add_terminal_width(config) do
195+
defp get_terminal_width do
187196
case :io.columns do
188-
{:ok, width} ->
189-
config.width(max(40, width))
190-
_ ->
191-
config
197+
{:ok, width} -> max(40, width)
198+
_ -> 80
192199
end
193200
end
194201
end

lib/ex_unit/lib/ex_unit/runner.ex

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,29 @@ defmodule ExUnit.Runner do
44
alias ExUnit.EventManager, as: EM
55
@stop_timeout 30_000
66

7-
defrecord Config, max_cases: 4, taken_cases: 0, async_cases: [], seed: nil,
8-
sync_cases: [], include: [], exclude: [], manager: []
9-
107
def run(async, sync, opts, load_us) do
118
opts = normalize_opts(opts)
129

1310
{:ok, pid} = EM.start_link
1411
formatters = [ExUnit.RunnerStats|opts[:formatters]]
1512
Enum.each formatters, &(:ok = EM.add_handler(pid, &1, opts))
1613

17-
config = Config[manager: pid].update(opts)
14+
config = %{
15+
seed: opts[:seed],
16+
max_cases: opts[:max_cases],
17+
sync_cases: [],
18+
async_cases: [],
19+
taken_cases: 0,
20+
include: opts[:include],
21+
exclude: opts[:exclude],
22+
manager: pid
23+
}
1824

1925
{run_us, _} =
2026
:timer.tc fn ->
2127
EM.suite_started(config.manager, opts)
22-
loop config.async_cases(shuffle(config, async)).sync_cases(shuffle(config, sync))
28+
loop %{config | sync_cases: shuffle(config, sync),
29+
async_cases: shuffle(config, async)}
2330
end
2431

2532
EM.suite_finished(config.manager, run_us, load_us)
@@ -44,7 +51,7 @@ defmodule ExUnit.Runner do
4451
|> Keyword.put_new(:seed, :erlang.now |> elem(2))
4552
end
4653

47-
defp loop(Config[] = config) do
54+
defp loop(config) do
4855
available = config.max_cases - config.taken_cases
4956

5057
cond do
@@ -78,7 +85,7 @@ defmodule ExUnit.Runner do
7885
defp wait_until_available(config) do
7986
receive do
8087
{_pid, :case_finished, _test_case} ->
81-
loop config.update_taken_cases(&(&1-1))
88+
loop %{config | taken_cases: config.taken_cases - 1}
8289
end
8390
end
8491

@@ -91,7 +98,7 @@ defmodule ExUnit.Runner do
9198
end
9299
end
93100

94-
loop config.update_taken_cases(&(&1+length(cases)))
101+
loop %{config | taken_cases: config.taken_cases + length(cases)}
95102
end
96103

97104
defp run_case(config, pid, case_name) do
@@ -244,27 +251,27 @@ defmodule ExUnit.Runner do
244251

245252
## Helpers
246253

247-
defp shuffle(Config[seed: 0], list) do
254+
defp shuffle(%{seed: 0}, list) do
248255
Enum.reverse(list)
249256
end
250257

251-
defp shuffle(Config[seed: seed], list) do
258+
defp shuffle(%{seed: seed}, list) do
252259
:random.seed(3172, 9814, seed)
253260
Enum.shuffle(list)
254261
end
255262

256-
defp take_async_cases(Config[] = config, count) do
263+
defp take_async_cases(config, count) do
257264
case config.async_cases do
258265
[] -> nil
259266
cases ->
260267
{response, remaining} = Enum.split(cases, count)
261-
{config.async_cases(remaining), response}
268+
{%{config | async_cases: remaining}, response}
262269
end
263270
end
264271

265-
defp take_sync_cases(Config[] = config) do
272+
defp take_sync_cases(config) do
266273
case config.sync_cases do
267-
[h|t] -> {config.sync_cases(t), [h]}
274+
[h|t] -> {%{config | sync_cases: t}, [h]}
268275
[] -> nil
269276
end
270277
end

lib/ex_unit/lib/ex_unit/server.ex

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ defmodule ExUnit.Server do
44
@timeout 30_000
55
use GenServer.Behaviour
66

7-
defrecord Config, async_cases: HashSet.new, sync_cases: HashSet.new,
8-
start_load: nil, captured_devices: HashSet.new
9-
107
def start_link() do
118
:gen_server.start_link({:local, __MODULE__}, __MODULE__, :ok, [])
129
end
@@ -44,7 +41,9 @@ defmodule ExUnit.Server do
4441
## Callbacks
4542

4643
def init(:ok) do
47-
{:ok, Config[]}
44+
config = %{async_cases: HashSet.new, sync_cases: HashSet.new,
45+
start_load: nil, captured_devices: HashSet.new}
46+
{:ok, config}
4847
end
4948

5049
def handle_call(:start_run, _from, config) do
@@ -55,33 +54,37 @@ defmodule ExUnit.Server do
5554

5655
{:reply,
5756
{config.async_cases, config.sync_cases, load_us},
58-
config.async_cases(HashSet.new).sync_cases(HashSet.new).start_load(nil)}
57+
%{config | async_cases: HashSet.new, sync_cases: HashSet.new, start_load: nil}}
5958
end
6059

6160
def handle_call({:add_device, device}, _from, config) do
6261
{:reply,
6362
not(device in config.captured_devices),
64-
config.update_captured_devices(&Set.put(&1, device))}
63+
%{config | captured_devices: Set.put(config.captured_devices, device)}}
6564
end
6665

6766
def handle_call({:remove_device, device}, _from, config) do
68-
{:reply, :ok, config.update_captured_devices(&Set.delete(&1, device))}
67+
{:reply, :ok,
68+
%{config | captured_devices: Set.delete(config.captured_devices, device)}}
6969
end
7070

7171
def handle_call(request, from, config) do
7272
super(request, from, config)
7373
end
7474

7575
def handle_cast(:start_load, config) do
76-
{:noreply, config.start_load(:os.timestamp)}
76+
{:noreply,
77+
%{config | start_load: :os.timestamp}}
7778
end
7879

7980
def handle_cast({:add_async_case, name}, config) do
80-
{:noreply, config.update_async_cases &Set.put(&1, name)}
81+
{:noreply,
82+
%{config | async_cases: Set.put(config.async_cases, name)}}
8183
end
8284

8385
def handle_cast({:add_sync_case, name}, config) do
84-
{:noreply, config.update_sync_cases &Set.put(&1, name)}
86+
{:noreply,
87+
%{config | sync_cases: Set.put(config.sync_cases, name)}}
8588
end
8689

8790
def handle_cast(request, config) do

0 commit comments

Comments
 (0)