123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #!/usr/bin/env elixir
- ExUnit.start
- defmodule EchoClientMacros do
- defmacro testcase(name, term) do
- quote do
- test unquote(name), %{socket: socket} do
- test_term(socket, unquote(name), unquote(term))
- end
- end
- end
- end
- defmodule EchoClient do
- @port 5001
- import EchoClientMacros
- use ExUnit.Case, async: false, seed: 0
- setup_all do
- opts = [:binary, active: false, packet: 4, nodelay: true]
- {:ok, socket} = :gen_tcp.connect('localhost', @port, opts)
- {:ok, %{socket: socket}}
- end
- def test_term(socket, name, term) do
- :ok = :gen_tcp.send(socket, :erlang.term_to_binary(name))
- {:ok, packet} = :gen_tcp.recv(socket, 0)
- binary = :erlang.term_to_binary(term)
- :ok = :gen_tcp.send(socket, binary)
- {:ok, packet} = :gen_tcp.recv(socket, 0)
- returned_term = :erlang.binary_to_term(packet)
- assert(term === returned_term, "Returned term doesn't match")
- end
- testcase "basic_atom", :hi
- testcase "empty_list", []
- testcase "empty_dictionary", {}
- testcase "string", "string"
- testcase "binary", <<"alsdjaljf">>
- testcase "int", 12345
- testcase "float", 123.45
- testcase "large_int", 127552384489488384
- testcase "kitchen_sink", [
- :someatom,
- {:some, :other, "tuple"},
- ["maybe", 1, []],
- {"with", {:embedded, ["tuples and lists"]}, nil},
- 127542384389482384,
- 5334.32,
- 102,
- -1394,
- -349.2,
- -498384595043,
- [%{a: "map", with: <<"binaries">>, also: {<<"tuples">>, ["and"], ["lists"]}},
- %{:a => "anotherone", 3 => "int keys"}],
- %{{:something} => "else"}
- ]
- # testcase "really large int", 12345678901234512309301923091 # Currently not supported
- end
|