Remove dependency on Boost.Test.
diff --git a/asio/src/Makefile.mgw b/asio/src/Makefile.mgw
index 015da58..2d5a5e4 100644
--- a/asio/src/Makefile.mgw
+++ b/asio/src/Makefile.mgw
@@ -11,8 +11,6 @@
 	tests/performance/client.exe \
 	tests/performance/server.exe
 
-UNIT_TEST_OBJ = tests/unit/unit_test.o
-
 UNIT_TEST_EXES = \
 	tests/unit/basic_datagram_socket.exe \
 	tests/unit/basic_deadline_timer.exe \
@@ -146,12 +144,11 @@
 
 all: \
 	$(PERFORMANCE_TEST_EXES) \
-	$(UNIT_TEST_OBJ) \
 	$(UNIT_TEST_EXES) \
 	$(EXAMPLE_EXES) \
 	$(OTHER_EXAMPLE_EXES)
 
-check: $(UNIT_TEST_OBJ) $(UNIT_TEST_EXES) $(addprefix run.,$(UNIT_TEST_EXES))
+check: $(UNIT_TEST_EXES) $(addprefix run.,$(UNIT_TEST_EXES))
 
 $(addprefix run.,$(UNIT_TEST_EXES))::
 	@echo === Running $(@:run.%=%) ===
@@ -170,7 +167,7 @@
 	-rm -f $(OTHER_EXAMPLE_EXES:.exe=.o)
 
 $(UNIT_TEST_EXES): %.exe: %.o
-	g++ -o$@ $(LDFLAGS) $< $(UNIT_TEST_OBJ) $(LIBS)
+	g++ -o$@ $(LDFLAGS) $< $(LIBS)
 
 $(PERFORMANCE_TEST_EXES) $(EXAMPLE_EXES): %.exe: %.o
 	g++ -o$@ $(LDFLAGS) $< $(LIBS)
diff --git a/asio/src/Makefile.msc b/asio/src/Makefile.msc
index 8f66356..061f711 100644
--- a/asio/src/Makefile.msc
+++ b/asio/src/Makefile.msc
@@ -94,8 +94,6 @@
 	tests\performance\client.exe \
 	tests\performance\server.exe
 
-UNIT_TEST_OBJ = tests\unit\unit_test.obj
-
 UNIT_TEST_EXES = \
 	tests\unit\basic_datagram_socket.exe \
 	tests\unit\basic_deadline_timer.exe \
@@ -265,10 +263,6 @@
 	$(SSL_UNIT_TEST_EXES) \
 	$(SSL_EXAMPLE_EXES)
 
-$(UNIT_TEST_EXES): $(UNIT_TEST_OBJ)
-
-$(SSL_UNIT_TEST_EXES): $(UNIT_TEST_OBJ)
-
 check: $(UNIT_TEST_EXES)
 	!@echo === Running $** === && $** && echo.
 
@@ -282,19 +276,19 @@
 	cl -Fe$@ -Fotests\unit\unit_test.obj $(CXXFLAGS) $(DEFINES) -c tests\unit\unit_test.cpp
 
 {tests\unit}.cpp{tests\unit}.exe:
-	cl -Fe$@ -Fo$(<:.cpp=.obj) $(CXXFLAGS) $(DEFINES) $< $(UNIT_TEST_OBJ) $(LIBS) -link -opt:ref
+	cl -Fe$@ -Fo$(<:.cpp=.obj) $(CXXFLAGS) $(DEFINES) $< $(LIBS) -link -opt:ref
 
 {tests\unit\generic}.cpp{tests\unit\generic}.exe:
-	cl -Fe$@ -Fo$(<:.cpp=.obj) $(CXXFLAGS) $(DEFINES) $< $(UNIT_TEST_OBJ) $(LIBS) -link -opt:ref
+	cl -Fe$@ -Fo$(<:.cpp=.obj) $(CXXFLAGS) $(DEFINES) $< $(LIBS) -link -opt:ref
 
 {tests\unit\ip}.cpp{tests\unit\ip}.exe:
-	cl -Fe$@ -Fo$(<:.cpp=.obj) $(CXXFLAGS) $(DEFINES) $< $(UNIT_TEST_OBJ) $(LIBS) -link -opt:ref
+	cl -Fe$@ -Fo$(<:.cpp=.obj) $(CXXFLAGS) $(DEFINES) $< $(LIBS) -link -opt:ref
 
 {tests\unit\ssl}.cpp{tests\unit\ssl}.exe:
-	cl -Fe$@ -Fo$(<:.cpp=.obj) $(CXXFLAGS) $(SSL_CXXFLAGS) $(DEFINES) $< $(UNIT_TEST_OBJ) $(SSL_LIBS) $(LIBS) -link -opt:ref
+	cl -Fe$@ -Fo$(<:.cpp=.obj) $(CXXFLAGS) $(SSL_CXXFLAGS) $(DEFINES) $< $(SSL_LIBS) $(LIBS) -link -opt:ref
 
 {tests\unit\windows}.cpp{tests\unit\windows}.exe:
-	cl -Fe$@ -Fo$(<:.cpp=.obj) $(CXXFLAGS) $(DEFINES) $< $(UNIT_TEST_OBJ) $(LIBS) -link -opt:ref
+	cl -Fe$@ -Fo$(<:.cpp=.obj) $(CXXFLAGS) $(DEFINES) $< $(LIBS) -link -opt:ref
 
 {examples\cpp03\allocation}.cpp{examples\cpp03\allocation}.exe:
 	cl -Fe$@ -Fo$(<:.cpp=.obj) $(CXXFLAGS) $(DEFINES) $< $(LIBS) -link -opt:ref
diff --git a/asio/src/tests/Makefile.am b/asio/src/tests/Makefile.am
index 083bc2c..1c3a7f5 100644
--- a/asio/src/tests/Makefile.am
+++ b/asio/src/tests/Makefile.am
@@ -249,111 +249,111 @@
 performance_server_SOURCES = performance/server.cpp
 endif
 
-unit_basic_datagram_socket_SOURCES = unit/basic_datagram_socket.cpp unit/unit_test.cpp
-unit_basic_deadline_timer_SOURCES = unit/basic_deadline_timer.cpp unit/unit_test.cpp
-unit_basic_raw_socket_SOURCES = unit/basic_raw_socket.cpp unit/unit_test.cpp
-unit_basic_seq_packet_socket_SOURCES = unit/basic_seq_packet_socket.cpp unit/unit_test.cpp
-unit_basic_serial_port_SOURCES = unit/basic_serial_port.cpp unit/unit_test.cpp
-unit_basic_signal_set_SOURCES = unit/basic_signal_set.cpp unit/unit_test.cpp
-unit_basic_socket_acceptor_SOURCES = unit/basic_socket_acceptor.cpp unit/unit_test.cpp
-unit_basic_stream_socket_SOURCES = unit/basic_stream_socket.cpp unit/unit_test.cpp
-unit_basic_streambuf_SOURCES = unit/basic_streambuf.cpp unit/unit_test.cpp
-unit_basic_waitable_timer_SOURCES = unit/basic_waitable_timer.cpp unit/unit_test.cpp
-unit_buffer_SOURCES = unit/buffer.cpp unit/unit_test.cpp
-unit_buffers_iterator_SOURCES = unit/buffers_iterator.cpp unit/unit_test.cpp
-unit_buffered_read_stream_SOURCES = unit/buffered_read_stream.cpp unit/unit_test.cpp
-unit_buffered_stream_SOURCES = unit/buffered_stream.cpp unit/unit_test.cpp
-unit_buffered_write_stream_SOURCES = unit/buffered_write_stream.cpp unit/unit_test.cpp
-unit_completion_condition_SOURCES = unit/completion_condition.cpp unit/unit_test.cpp
-unit_connect_SOURCES = unit/connect.cpp unit/unit_test.cpp
-unit_coroutine_SOURCES = unit/coroutine.cpp unit/unit_test.cpp
-unit_datagram_socket_service_SOURCES = unit/datagram_socket_service.cpp unit/unit_test.cpp
-unit_deadline_timer_service_SOURCES = unit/deadline_timer_service.cpp unit/unit_test.cpp
-unit_deadline_timer_SOURCES = unit/deadline_timer.cpp unit/unit_test.cpp
-unit_error_SOURCES = unit/error.cpp unit/unit_test.cpp
-unit_generic_basic_endpoint_SOURCES = unit/generic/basic_endpoint.cpp unit/unit_test.cpp
-unit_generic_datagram_protocol_SOURCES = unit/generic/datagram_protocol.cpp unit/unit_test.cpp
-unit_generic_raw_protocol_SOURCES = unit/generic/raw_protocol.cpp unit/unit_test.cpp
-unit_generic_seq_packet_protocol_SOURCES = unit/generic/seq_packet_protocol.cpp unit/unit_test.cpp
-unit_generic_stream_protocol_SOURCES = unit/generic/stream_protocol.cpp unit/unit_test.cpp
-unit_high_resolution_timer_SOURCES = unit/high_resolution_timer.cpp unit/unit_test.cpp
-unit_io_service_SOURCES = unit/io_service.cpp unit/unit_test.cpp
-unit_ip_address_SOURCES = unit/ip/address.cpp unit/unit_test.cpp
-unit_ip_address_v4_SOURCES = unit/ip/address_v4.cpp unit/unit_test.cpp
-unit_ip_address_v4_iterator_SOURCES = unit/ip/address_v4_iterator.cpp unit/unit_test.cpp
-unit_ip_address_v4_range_SOURCES = unit/ip/address_v4_range.cpp unit/unit_test.cpp
-unit_ip_address_v6_SOURCES = unit/ip/address_v6.cpp unit/unit_test.cpp
-unit_ip_address_v6_iterator_SOURCES = unit/ip/address_v6_iterator.cpp unit/unit_test.cpp
-unit_ip_address_v6_range_SOURCES = unit/ip/address_v6_range.cpp unit/unit_test.cpp
-unit_ip_basic_endpoint_SOURCES = unit/ip/basic_endpoint.cpp unit/unit_test.cpp
-unit_ip_basic_resolver_SOURCES = unit/ip/basic_resolver.cpp unit/unit_test.cpp
-unit_ip_basic_resolver_entry_SOURCES = unit/ip/basic_resolver_entry.cpp unit/unit_test.cpp
-unit_ip_basic_resolver_iterator_SOURCES = unit/ip/basic_resolver_iterator.cpp unit/unit_test.cpp
-unit_ip_basic_resolver_query_SOURCES = unit/ip/basic_resolver_query.cpp unit/unit_test.cpp
-unit_ip_host_name_SOURCES = unit/ip/host_name.cpp unit/unit_test.cpp
-unit_ip_icmp_SOURCES = unit/ip/icmp.cpp unit/unit_test.cpp
-unit_ip_multicast_SOURCES = unit/ip/multicast.cpp unit/unit_test.cpp
-unit_ip_network_v4_SOURCES = unit/ip/network_v4.cpp unit/unit_test.cpp
-unit_ip_network_v6_SOURCES = unit/ip/network_v6.cpp unit/unit_test.cpp
-unit_ip_resolver_query_base_SOURCES = unit/ip/resolver_query_base.cpp unit/unit_test.cpp
-unit_ip_resolver_service_SOURCES = unit/ip/resolver_service.cpp unit/unit_test.cpp
-unit_ip_tcp_SOURCES = unit/ip/tcp.cpp unit/unit_test.cpp
-unit_ip_udp_SOURCES = unit/ip/udp.cpp unit/unit_test.cpp
-unit_ip_unicast_SOURCES = unit/ip/unicast.cpp unit/unit_test.cpp
-unit_ip_v6_only_SOURCES = unit/ip/v6_only.cpp unit/unit_test.cpp
-unit_is_read_buffered_SOURCES = unit/is_read_buffered.cpp unit/unit_test.cpp
-unit_is_write_buffered_SOURCES = unit/is_write_buffered.cpp unit/unit_test.cpp
-unit_local_basic_endpoint_SOURCES = unit/local/basic_endpoint.cpp unit/unit_test.cpp
-unit_local_connect_pair_SOURCES = unit/local/connect_pair.cpp unit/unit_test.cpp
-unit_local_datagram_protocol_SOURCES = unit/local/datagram_protocol.cpp unit/unit_test.cpp
-unit_local_stream_protocol_SOURCES = unit/local/stream_protocol.cpp unit/unit_test.cpp
-unit_placeholders_SOURCES = unit/placeholders.cpp unit/unit_test.cpp
-unit_posix_basic_descriptor_SOURCES = unit/posix/basic_descriptor.cpp unit/unit_test.cpp
-unit_posix_basic_stream_descriptor_SOURCES = unit/posix/basic_stream_descriptor.cpp unit/unit_test.cpp
-unit_posix_descriptor_base_SOURCES = unit/posix/descriptor_base.cpp unit/unit_test.cpp
-unit_posix_stream_descriptor_SOURCES = unit/posix/stream_descriptor.cpp unit/unit_test.cpp
-unit_posix_stream_descriptor_service_SOURCES = unit/posix/stream_descriptor_service.cpp unit/unit_test.cpp
-unit_raw_socket_service_SOURCES = unit/raw_socket_service.cpp unit/unit_test.cpp
-unit_read_SOURCES = unit/read.cpp unit/unit_test.cpp
-unit_read_at_SOURCES = unit/read_at.cpp unit/unit_test.cpp
-unit_read_until_SOURCES = unit/read_until.cpp unit/unit_test.cpp
-unit_seq_packet_socket_service_SOURCES = unit/seq_packet_socket_service.cpp unit/unit_test.cpp
-unit_serial_port_SOURCES = unit/serial_port.cpp unit/unit_test.cpp
-unit_serial_port_base_SOURCES = unit/serial_port_base.cpp unit/unit_test.cpp
-unit_serial_port_service_SOURCES = unit/serial_port_service.cpp unit/unit_test.cpp
-unit_signal_set_SOURCES = unit/signal_set.cpp unit/unit_test.cpp
-unit_signal_set_service_SOURCES = unit/signal_set_service.cpp unit/unit_test.cpp
-unit_socket_acceptor_service_SOURCES = unit/socket_acceptor_service.cpp unit/unit_test.cpp
-unit_socket_base_SOURCES = unit/socket_base.cpp unit/unit_test.cpp
-unit_steady_timer_SOURCES = unit/steady_timer.cpp unit/unit_test.cpp
-unit_strand_SOURCES = unit/strand.cpp unit/unit_test.cpp
-unit_stream_socket_service_SOURCES = unit/stream_socket_service.cpp unit/unit_test.cpp
-unit_streambuf_SOURCES = unit/streambuf.cpp unit/unit_test.cpp
-unit_system_timer_SOURCES = unit/system_timer.cpp unit/unit_test.cpp
-unit_thread_SOURCES = unit/thread.cpp unit/unit_test.cpp
-unit_time_traits_SOURCES = unit/time_traits.cpp unit/unit_test.cpp
-unit_wait_traits_SOURCES = unit/wait_traits.cpp unit/unit_test.cpp
-unit_waitable_timer_service_SOURCES = unit/waitable_timer_service.cpp unit/unit_test.cpp
-unit_windows_basic_handle_SOURCES = unit/windows/basic_handle.cpp unit/unit_test.cpp
-unit_windows_basic_object_handle_SOURCES = unit/windows/basic_object_handle.cpp unit/unit_test.cpp
-unit_windows_basic_random_access_handle_SOURCES = unit/windows/basic_random_access_handle.cpp unit/unit_test.cpp
-unit_windows_basic_stream_handle_SOURCES = unit/windows/basic_stream_handle.cpp unit/unit_test.cpp
-unit_windows_object_handle_SOURCES = unit/windows/object_handle.cpp unit/unit_test.cpp
-unit_windows_object_handle_service_SOURCES = unit/windows/object_handle_service.cpp unit/unit_test.cpp
-unit_windows_overlapped_ptr_SOURCES = unit/windows/overlapped_ptr.cpp unit/unit_test.cpp
-unit_windows_random_access_handle_SOURCES = unit/windows/random_access_handle.cpp unit/unit_test.cpp
-unit_windows_random_access_handle_service_SOURCES = unit/windows/random_access_handle_service.cpp unit/unit_test.cpp
-unit_windows_stream_handle_SOURCES = unit/windows/stream_handle.cpp unit/unit_test.cpp
-unit_windows_stream_handle_service_SOURCES = unit/windows/stream_handle_service.cpp unit/unit_test.cpp
-unit_write_SOURCES = unit/write.cpp unit/unit_test.cpp
-unit_write_at_SOURCES = unit/write_at.cpp unit/unit_test.cpp
+unit_basic_datagram_socket_SOURCES = unit/basic_datagram_socket.cpp
+unit_basic_deadline_timer_SOURCES = unit/basic_deadline_timer.cpp
+unit_basic_raw_socket_SOURCES = unit/basic_raw_socket.cpp
+unit_basic_seq_packet_socket_SOURCES = unit/basic_seq_packet_socket.cpp
+unit_basic_serial_port_SOURCES = unit/basic_serial_port.cpp
+unit_basic_signal_set_SOURCES = unit/basic_signal_set.cpp
+unit_basic_socket_acceptor_SOURCES = unit/basic_socket_acceptor.cpp
+unit_basic_stream_socket_SOURCES = unit/basic_stream_socket.cpp
+unit_basic_streambuf_SOURCES = unit/basic_streambuf.cpp
+unit_basic_waitable_timer_SOURCES = unit/basic_waitable_timer.cpp
+unit_buffer_SOURCES = unit/buffer.cpp
+unit_buffers_iterator_SOURCES = unit/buffers_iterator.cpp
+unit_buffered_read_stream_SOURCES = unit/buffered_read_stream.cpp
+unit_buffered_stream_SOURCES = unit/buffered_stream.cpp
+unit_buffered_write_stream_SOURCES = unit/buffered_write_stream.cpp
+unit_completion_condition_SOURCES = unit/completion_condition.cpp
+unit_connect_SOURCES = unit/connect.cpp
+unit_coroutine_SOURCES = unit/coroutine.cpp
+unit_datagram_socket_service_SOURCES = unit/datagram_socket_service.cpp
+unit_deadline_timer_service_SOURCES = unit/deadline_timer_service.cpp
+unit_deadline_timer_SOURCES = unit/deadline_timer.cpp
+unit_error_SOURCES = unit/error.cpp
+unit_generic_basic_endpoint_SOURCES = unit/generic/basic_endpoint.cpp
+unit_generic_datagram_protocol_SOURCES = unit/generic/datagram_protocol.cpp
+unit_generic_raw_protocol_SOURCES = unit/generic/raw_protocol.cpp
+unit_generic_seq_packet_protocol_SOURCES = unit/generic/seq_packet_protocol.cpp
+unit_generic_stream_protocol_SOURCES = unit/generic/stream_protocol.cpp
+unit_high_resolution_timer_SOURCES = unit/high_resolution_timer.cpp
+unit_io_service_SOURCES = unit/io_service.cpp
+unit_ip_address_SOURCES = unit/ip/address.cpp
+unit_ip_address_v4_SOURCES = unit/ip/address_v4.cpp
+unit_ip_address_v4_iterator_SOURCES = unit/ip/address_v4_iterator.cpp
+unit_ip_address_v4_range_SOURCES = unit/ip/address_v4_range.cpp
+unit_ip_address_v6_SOURCES = unit/ip/address_v6.cpp
+unit_ip_address_v6_iterator_SOURCES = unit/ip/address_v6_iterator.cpp
+unit_ip_address_v6_range_SOURCES = unit/ip/address_v6_range.cpp
+unit_ip_basic_endpoint_SOURCES = unit/ip/basic_endpoint.cpp
+unit_ip_basic_resolver_SOURCES = unit/ip/basic_resolver.cpp
+unit_ip_basic_resolver_entry_SOURCES = unit/ip/basic_resolver_entry.cpp
+unit_ip_basic_resolver_iterator_SOURCES = unit/ip/basic_resolver_iterator.cpp
+unit_ip_basic_resolver_query_SOURCES = unit/ip/basic_resolver_query.cpp
+unit_ip_host_name_SOURCES = unit/ip/host_name.cpp
+unit_ip_icmp_SOURCES = unit/ip/icmp.cpp
+unit_ip_multicast_SOURCES = unit/ip/multicast.cpp
+unit_ip_network_v4_SOURCES = unit/ip/network_v4.cpp
+unit_ip_network_v6_SOURCES = unit/ip/network_v6.cpp
+unit_ip_resolver_query_base_SOURCES = unit/ip/resolver_query_base.cpp
+unit_ip_resolver_service_SOURCES = unit/ip/resolver_service.cpp
+unit_ip_tcp_SOURCES = unit/ip/tcp.cpp
+unit_ip_udp_SOURCES = unit/ip/udp.cpp
+unit_ip_unicast_SOURCES = unit/ip/unicast.cpp
+unit_ip_v6_only_SOURCES = unit/ip/v6_only.cpp
+unit_is_read_buffered_SOURCES = unit/is_read_buffered.cpp
+unit_is_write_buffered_SOURCES = unit/is_write_buffered.cpp
+unit_local_basic_endpoint_SOURCES = unit/local/basic_endpoint.cpp
+unit_local_connect_pair_SOURCES = unit/local/connect_pair.cpp
+unit_local_datagram_protocol_SOURCES = unit/local/datagram_protocol.cpp
+unit_local_stream_protocol_SOURCES = unit/local/stream_protocol.cpp
+unit_placeholders_SOURCES = unit/placeholders.cpp
+unit_posix_basic_descriptor_SOURCES = unit/posix/basic_descriptor.cpp
+unit_posix_basic_stream_descriptor_SOURCES = unit/posix/basic_stream_descriptor.cpp
+unit_posix_descriptor_base_SOURCES = unit/posix/descriptor_base.cpp
+unit_posix_stream_descriptor_SOURCES = unit/posix/stream_descriptor.cpp
+unit_posix_stream_descriptor_service_SOURCES = unit/posix/stream_descriptor_service.cpp
+unit_raw_socket_service_SOURCES = unit/raw_socket_service.cpp
+unit_read_SOURCES = unit/read.cpp
+unit_read_at_SOURCES = unit/read_at.cpp
+unit_read_until_SOURCES = unit/read_until.cpp
+unit_seq_packet_socket_service_SOURCES = unit/seq_packet_socket_service.cpp
+unit_serial_port_SOURCES = unit/serial_port.cpp
+unit_serial_port_base_SOURCES = unit/serial_port_base.cpp
+unit_serial_port_service_SOURCES = unit/serial_port_service.cpp
+unit_signal_set_SOURCES = unit/signal_set.cpp
+unit_signal_set_service_SOURCES = unit/signal_set_service.cpp
+unit_socket_acceptor_service_SOURCES = unit/socket_acceptor_service.cpp
+unit_socket_base_SOURCES = unit/socket_base.cpp
+unit_steady_timer_SOURCES = unit/steady_timer.cpp
+unit_strand_SOURCES = unit/strand.cpp
+unit_stream_socket_service_SOURCES = unit/stream_socket_service.cpp
+unit_streambuf_SOURCES = unit/streambuf.cpp
+unit_system_timer_SOURCES = unit/system_timer.cpp
+unit_thread_SOURCES = unit/thread.cpp
+unit_time_traits_SOURCES = unit/time_traits.cpp
+unit_wait_traits_SOURCES = unit/wait_traits.cpp
+unit_waitable_timer_service_SOURCES = unit/waitable_timer_service.cpp
+unit_windows_basic_handle_SOURCES = unit/windows/basic_handle.cpp
+unit_windows_basic_object_handle_SOURCES = unit/windows/basic_object_handle.cpp
+unit_windows_basic_random_access_handle_SOURCES = unit/windows/basic_random_access_handle.cpp
+unit_windows_basic_stream_handle_SOURCES = unit/windows/basic_stream_handle.cpp
+unit_windows_object_handle_SOURCES = unit/windows/object_handle.cpp
+unit_windows_object_handle_service_SOURCES = unit/windows/object_handle_service.cpp
+unit_windows_overlapped_ptr_SOURCES = unit/windows/overlapped_ptr.cpp
+unit_windows_random_access_handle_SOURCES = unit/windows/random_access_handle.cpp
+unit_windows_random_access_handle_service_SOURCES = unit/windows/random_access_handle_service.cpp
+unit_windows_stream_handle_SOURCES = unit/windows/stream_handle.cpp
+unit_windows_stream_handle_service_SOURCES = unit/windows/stream_handle_service.cpp
+unit_write_SOURCES = unit/write.cpp
+unit_write_at_SOURCES = unit/write_at.cpp
 
 if HAVE_OPENSSL
-unit_ssl_context_base_SOURCES = unit/ssl/context_base.cpp unit/unit_test.cpp
-unit_ssl_context_SOURCES = unit/ssl/context.cpp unit/unit_test.cpp
-unit_ssl_stream_base_SOURCES = unit/ssl/stream_base.cpp unit/unit_test.cpp
-unit_ssl_rfc2818_verification_SOURCES = unit/ssl/rfc2818_verification.cpp unit/unit_test.cpp
-unit_ssl_stream_SOURCES = unit/ssl/stream.cpp unit/unit_test.cpp
+unit_ssl_context_base_SOURCES = unit/ssl/context_base.cpp
+unit_ssl_context_SOURCES = unit/ssl/context.cpp
+unit_ssl_stream_base_SOURCES = unit/ssl/stream_base.cpp
+unit_ssl_rfc2818_verification_SOURCES = unit/ssl/rfc2818_verification.cpp
+unit_ssl_stream_SOURCES = unit/ssl/stream.cpp
 endif
 
 EXTRA_DIST = \
diff --git a/asio/src/tests/unit/unit_test.cpp b/asio/src/tests/unit/unit_test.cpp
deleted file mode 100644
index c6dedf9..0000000
--- a/asio/src/tests/unit/unit_test.cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// unit_test.cpp
-// ~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "unit_test.hpp"
-
-#if !defined(ASIO_STANDALONE)
-# if (BOOST_VERSION < 104800)
-#  include <boost/test/included/unit_test_framework.hpp>
-# else
-#  include <boost/test/included/unit_test.hpp>
-# endif
-#endif
diff --git a/asio/src/tests/unit/unit_test.hpp b/asio/src/tests/unit/unit_test.hpp
index 9925bc0..fb4bd1c 100644
--- a/asio/src/tests/unit/unit_test.hpp
+++ b/asio/src/tests/unit/unit_test.hpp
@@ -12,6 +12,8 @@
 #define UNIT_TEST_HPP
 
 #include "asio/detail/config.hpp"
+#include <iostream>
+#include "asio/detail/atomic_count.hpp"
 
 #if defined(__sun)
 # include <stdlib.h> // Needed for lrand48.
@@ -29,106 +31,134 @@
 #endif // defined(__BORLANDC__)
 
 #if defined(ASIO_MSVC)
+# pragma warning (disable:4127)
 # pragma warning (push)
 # pragma warning (disable:4244)
 # pragma warning (disable:4702)
 #endif // defined(ASIO_MSVC)
 
-#if defined(ASIO_STANDALONE)
-
-#include <cassert>
-#include <iostream>
-
-#if defined(NDEBUG)
-# error NDEBUG must not be defined when building these unit tests
-#endif // defined(NDEBUG)
-
-#define ASIO_CHECK(expr) assert(expr)
-
-#define ASIO_CHECK_MESSAGE(expr, msg) \
-  do { if (!(expr)) { std::cout << msg << std::endl; assert(expr); } } while (0)
-
-#define ASIO_WARN_MESSAGE(expr, msg) \
-  do { if (!(expr)) { std::cout << msg << std::endl; } } while (0)
-
-#define ASIO_ERROR(msg) assert(0 && msg)
-
-#define ASIO_TEST_SUITE(name, tests) \
-  int main() \
-  { \
-    std::cout << name << " test suite begins" << std::endl; \
-    tests \
-    std::cout << name << " test suite ends" << std::endl; \
-    return 0; \
-  }
-
-#define ASIO_TEST_CASE(test) \
-  test(); \
-  std::cout << #test << " passed" << std::endl;
-
-#define ASIO_COMPILE_TEST_CASE(test) \
-  compile_test<&test>(); \
-  std::cout << #test << " passed" << std::endl;
-
-#if defined(ASIO_NO_EXCEPTIONS)
+#if !defined(ASIO_TEST_IOSTREAM)
+# define ASIO_TEST_IOSTREAM std::cerr
+#endif // !defined(ASIO_TEST_IOSTREAM)
 
 namespace asio {
 namespace detail {
 
+inline const char*& test_name()
+{
+  static const char* name = 0;
+  return name;
+}
+
+inline atomic_count& test_errors()
+{
+  static atomic_count errors;
+  return errors;
+}
+
+inline void begin_test_suite(const char* name)
+{
+  asio::detail::test_name();
+  asio::detail::test_errors();
+  ASIO_TEST_IOSTREAM << name << " test suite begins" << std::endl;
+}
+
+inline int end_test_suite(const char* name)
+{
+  ASIO_TEST_IOSTREAM << name << " test suite ends" << std::endl;
+  ASIO_TEST_IOSTREAM << "\n*** ";
+  long errors = asio::detail::test_errors();
+  if (errors == 0)
+    ASIO_TEST_IOSTREAM << "No errors detected.";
+  else if (errors == 1)
+    ASIO_TEST_IOSTREAM << "1 error detected.";
+  else
+    ASIO_TEST_IOSTREAM << errors << " errors detected." << std::endl;
+  ASIO_TEST_IOSTREAM << std::endl;
+  return errors == 0 ? 0 : 1;
+}
+
+template <void (*Test)()>
+inline void run_test(const char* name)
+{
+  test_name() = name;
+  long errors_before = asio::detail::test_errors();
+  Test();
+  if (test_errors() == errors_before)
+    ASIO_TEST_IOSTREAM << name << " passed" << std::endl;
+  else
+    ASIO_TEST_IOSTREAM << name << " failed" << std::endl;
+}
+
+template <void (*)()>
+inline void compile_test(const char* name)
+{
+  ASIO_TEST_IOSTREAM << name << " passed" << std::endl;
+}
+
+#if defined(ASIO_NO_EXCEPTIONS)
+
 template <typename T>
 void throw_exception(const T& t)
 {
-  std::cout << "Exception: " << t.what() << std::endl;
+  ASIO_TEST_IOSTREAM << "Exception: " << t.what() << std::endl;
   std::abort();
 }
 
+#endif // defined(ASIO_NO_EXCEPTIONS)
+
 } // namespace detail
 } // namespace asio
 
-#endif // defined(ASIO_NO_EXCEPTIONS)
+#define ASIO_CHECK(expr) \
+  do { if (!(expr)) { \
+    ASIO_TEST_IOSTREAM << __FILE__ << "(" << __LINE__ << "): " \
+      << asio::detail::test_name() << ": " \
+      << "check '" << #expr << "' failed" << std::endl; \
+    ++asio::detail::test_errors(); \
+  } } while (0)
 
-#else // defined(ASIO_STANDALONE)
+#define ASIO_CHECK_MESSAGE(expr, msg) \
+  do { if (!(expr)) { \
+    ASIO_TEST_IOSTREAM << __FILE__ << "(" << __LINE__ << "): " \
+      << asio::detail::test_name() << ": " \
+      << msg << std::endl; \
+    ++asio::detail::test_errors(); \
+  } } while (0)
 
-#include <boost/test/unit_test.hpp>
-using boost::unit_test::test_suite;
+#define ASIO_WARN_MESSAGE(expr, msg) \
+  do { if (!(expr)) { \
+    ASIO_TEST_IOSTREAM << __FILE__ << "(" << __LINE__ << "): " \
+      << asio::detail::test_name() << ": " \
+      << msg << std::endl; \
+  } } while (0)
 
-#define ASIO_CHECK(expr) BOOST_CHECK(expr)
-
-#define ASIO_CHECK_MESSAGE(expr, msg) BOOST_CHECK_MESSAGE(expr, msg)
-
-#define ASIO_WARN_MESSAGE(expr, msg) BOOST_WARN_MESSAGE(expr, msg)
-
-#define ASIO_ERROR(expr) BOOST_ERROR(expr)
+#define ASIO_ERROR(msg) \
+  do { \
+    ASIO_TEST_IOSTREAM << __FILE__ << "(" << __LINE__ << "): " \
+      << asio::detail::test_name() << ": " \
+      << msg << std::endl; \
+    ++asio::detail::test_errors(); \
+  } while (0)
 
 #define ASIO_TEST_SUITE(name, tests) \
-  test_suite* init_unit_test_suite(int, char*[]) \
+  int main() \
   { \
-    test_suite* t = BOOST_TEST_SUITE(name); \
+    asio::detail::begin_test_suite(name); \
     tests \
-    return t; \
+    return asio::detail::end_test_suite(name); \
   }
 
 #define ASIO_TEST_CASE(test) \
-  t->add(BOOST_TEST_CASE(&test));
+  asio::detail::run_test<&test>(#test);
 
 #define ASIO_COMPILE_TEST_CASE(test) \
-  t->add(BOOST_TEST_CASE(&compile_test<&test>));
-
-#endif // defined(ASIO_STANDALONE)
-
-#if defined(ASIO_MSVC)
-# pragma warning (pop)
-#endif // defined(ASIO_MSVC)
+  asio::detail::compile_test<&test>(#test);
 
 inline void null_test()
 {
 }
 
-template <void (*)()>
-inline void compile_test()
-{
-}
-
 #if defined(__GNUC__) && defined(_AIX)
 
 // AIX needs this symbol defined in asio, even if it doesn't do anything.
@@ -138,4 +168,8 @@
 
 #endif // defined(__GNUC__) && defined(_AIX)
 
+#if defined(ASIO_MSVC)
+# pragma warning (pop)
+#endif // defined(ASIO_MSVC)
+
 #endif // UNIT_TEST_HPP