@@ -4,52 +4,73 @@ defmodule PatternTapTest do
4
4
5
5
test "can do simple pattern matching" do
6
6
assert tap ( :ok , :ok , nil ) == nil
7
+ assert tap ( :ok , :ok ~> nil ) == nil
7
8
assert destruct ( :ok , :ok , nil ) == nil
9
+ assert destruct ( :ok , :ok ~> nil ) == nil
8
10
end
9
11
10
12
test "can do list pattern matching" do
11
13
assert tap ( [ :a ] , [ a ] , a ) == :a
14
+ assert tap ( [ :a ] , [ a ] ~> a ) == :a
12
15
assert destruct ( [ :a ] , [ a ] , a ) == :a
16
+ assert destruct ( [ :a ] , [ a ] ~> a ) == :a
13
17
end
14
18
15
19
test "variables are not available after" do
16
20
tap ( [ :foo ] , [ f ] , f )
17
21
assert binding [ :f ] == nil
22
+ tap ( [ :foo ] , [ f ] ~> f )
23
+ assert binding [ :f ] == nil
18
24
end
19
25
20
26
test "can do tuple pattern matching" do
21
27
assert tap ( { :b } , { b } , b ) == :b
28
+ assert tap ( { :b } , { b } ~> b ) == :b
22
29
assert destruct ( { :b } , { b } , b ) == :b
30
+ assert destruct ( { :b } , { b } ~> b ) == :b
23
31
end
24
32
25
33
@ data [ :a , :b , :c ]
26
34
test "can match with the |> operator" do
27
35
assert @ data |> Enum . map ( & ( to_string ( & 1 ) ) ) |> tap ( [ _ , b , _ ] , b ) == "b"
36
+ assert @ data |> Enum . map ( & ( to_string ( & 1 ) ) ) |> tap ( [ _ , b , _ ] ~> b ) == "b"
28
37
assert @ data |> Enum . map ( & ( to_string ( & 1 ) ) ) |> destruct ( [ _ , b , _ ] , b ) == "b"
38
+ assert @ data |> Enum . map ( & ( to_string ( & 1 ) ) ) |> destruct ( [ _ , b , _ ] ~> b ) == "b"
29
39
end
30
40
31
41
@ data [ key: :val , key2: :val2 ]
32
42
test "can match |> with keyword lists" do
33
43
assert @ data |> tap ( [ _ , { :key2 , v } ] , v ) == :val2
44
+ assert @ data |> tap ( [ _ , { :key2 , v } ] ~> v ) == :val2
34
45
assert @ data |> destruct ( [ _ , { :key2 , v } ] , v ) == :val2
46
+ assert @ data |> destruct ( [ _ , { :key2 , v } ] ~> v ) == :val2
35
47
end
36
48
37
49
test "can match typical {:ok, result}" do
38
50
assert { :ok , 1 } |> tap ( { :ok , result } , result ) == 1
51
+ assert { :ok , 1 } |> tap ( { :ok , result } ~> result ) == 1
39
52
assert { :ok , 1 } |> destruct ( { :ok , result } , result ) == 1
53
+ assert { :ok , 1 } |> destruct ( { :ok , result } ~> result ) == 1
40
54
end
41
55
42
56
test "failure matches result in the correct error message" do
43
57
assert_raise CaseClauseError , "no case clause matching: {:error, \" reason\" }" , fn ->
44
58
{ :error , "reason" } |> tap ( { :ok , result } , result )
45
59
end
60
+ assert_raise CaseClauseError , "no case clause matching: {:error, \" reason\" }" , fn ->
61
+ { :error , "reason" } |> tap ( { :ok , result } ~> result )
62
+ end
46
63
assert_raise MatchError , "no match of right hand side value: {:error, \" reason\" }" , fn ->
47
64
{ :error , "reason" } |> destruct ( { :ok , result } , result )
48
65
end
66
+ assert_raise MatchError , "no match of right hand side value: {:error, \" reason\" }" , fn ->
67
+ { :error , "reason" } |> destruct ( { :ok , result } ~> result )
68
+ end
49
69
end
50
70
51
71
test "destruct keeps variables around" do
52
72
destruct ( { :a , :b } , { a , b } , a )
73
+ destruct ( { :a , :b } , { a , b } ~> a )
53
74
assert a == :a
54
75
assert b == :b
55
76
end
0 commit comments