diff --git a/test/net/addr/sock.cpp b/test/net/addr/sock.cpp
index 372092e..e326572 100644
--- a/test/net/addr/sock.cpp
+++ b/test/net/addr/sock.cpp
@@ -1,5 +1,7 @@
 #include <stdplus/net/addr/sock.hpp>
 
+#include <format>
+#include <string>
 #include <string_view>
 
 #include <gtest/gtest.h>
@@ -26,6 +28,27 @@
     EXPECT_EQ(sizeof(sockaddr_in), addr1.sockaddrLen());
 }
 
+TEST(Sock4Addr, FromStr)
+{
+    constexpr FromStr<Sock4Addr> fs;
+    EXPECT_THROW(fs("10"sv), std::invalid_argument);
+    EXPECT_THROW(fs(":3959"sv), std::invalid_argument);
+    EXPECT_THROW(fs("0.0.0.0"sv), std::invalid_argument);
+    EXPECT_THROW(fs("0.0.0.0:"sv), std::invalid_argument);
+    EXPECT_THROW(fs(":::80"sv), std::invalid_argument);
+    EXPECT_EQ((Sock4Addr{In4Addr{}, 30}), fs("0.0.0.0:30"sv));
+}
+
+TEST(Sock4Addr, ToStr)
+{
+    ToStrHandle<ToStr<Sock4Addr>> tsh;
+    EXPECT_EQ("0.0.0.0:3959", tsh(Sock4Addr({}, 3959)));
+    EXPECT_EQ("255.0.255.255:28",
+              tsh(Sock4Addr(In4Addr{255, 0, 255, 255}, 28)));
+    EXPECT_EQ("a 1.2.3.4:32 b",
+              std::format("a {} b", Sock4Addr(In4Addr{1, 2, 3, 4}, 32)));
+}
+
 TEST(Sock6Addr, Basic)
 {
     constexpr Sock6Addr addr1{.addr = In6Addr{255}, .port = 3959, .scope = 0};
@@ -45,6 +68,27 @@
     EXPECT_EQ(sizeof(sockaddr_in6), addr1.sockaddrLen());
 }
 
+TEST(Sock6Addr, FromStr)
+{
+    constexpr FromStr<Sock6Addr> fs;
+    EXPECT_THROW(fs("10"sv), std::invalid_argument);
+    EXPECT_THROW(fs(":10"sv), std::invalid_argument);
+    EXPECT_THROW(fs("ff::"sv), std::invalid_argument);
+    EXPECT_THROW(fs("[ff::]"sv), std::invalid_argument);
+    EXPECT_THROW(fs("[::]:"sv), std::invalid_argument);
+    EXPECT_THROW(fs("0.0.0.0:0"sv), std::invalid_argument);
+    EXPECT_EQ((Sock6Addr{In6Addr{}, 80, 0}), fs("[::]:80"sv));
+}
+
+TEST(Sock6Addr, ToStr)
+{
+    ToStrHandle<ToStr<Sock6Addr>> tsh;
+    EXPECT_EQ("[::]:0", tsh(Sock6Addr({}, 0, 0)));
+    EXPECT_EQ("[ff00::]:128", tsh(Sock6Addr(In6Addr{0xff}, 128, 0)));
+    EXPECT_EQ("a [102:304::]:32 b",
+              std::format("a {} b", Sock6Addr(In6Addr{1, 2, 3, 4}, 32, 0)));
+}
+
 TEST(SockUAddr, Basic)
 {
     // Non-abstract Requires null-terminator
@@ -90,6 +134,24 @@
     EXPECT_EQ(addr4.sockaddrLen(), sizeof(addr.sun_family));
 }
 
+TEST(SockUAddr, FromStr)
+{
+    constexpr FromStr<SockUAddr> fs;
+    std::string as(sizeof(sockaddr_un), 'a');
+    EXPECT_THROW(fs(std::string_view(as)), std::invalid_argument);
+    EXPECT_THROW(fs("a\0"sv), std::invalid_argument);
+    EXPECT_EQ((SockUAddr{"/nope"sv}), fs("unix:/nope"sv));
+    EXPECT_EQ((SockUAddr{"@hi"sv}), fs("@hi"sv));
+}
+
+TEST(SockUAddr, ToStr)
+{
+    ToStrHandle<ToStr<SockUAddr>> tsh;
+    EXPECT_EQ("unix:/nope", tsh(SockUAddr("/nope"sv)));
+    EXPECT_EQ("unix:@hi", tsh(SockUAddr("\0hi"sv)));
+    EXPECT_EQ("a unix:a b", std::format("a {} b", SockUAddr("a"sv)));
+}
+
 TEST(SockAnyAddr, Basic)
 {
     constexpr SockAnyAddr addr1(std::in_place_type<Sock4Addr>, In4Addr{255},
@@ -103,4 +165,23 @@
     EXPECT_EQ(addr2.sockaddrLen(), sizeof(sa_family_t) + 4);
 }
 
+TEST(SockAnyAddr, FromStr)
+{
+    constexpr FromStr<SockAnyAddr> fs;
+    EXPECT_THROW(fs("abcd"sv), std::invalid_argument);
+    EXPECT_THROW(fs("/nope"sv), std::invalid_argument);
+    EXPECT_EQ((Sock4Addr{In4Addr{}, 30}), fs("0.0.0.0:30"sv));
+    EXPECT_EQ((Sock6Addr{In6Addr{}, 80, 0}), fs("[::]:80"sv));
+    EXPECT_EQ((SockUAddr{"/nope"sv}), fs("unix:/nope"sv));
+}
+
+TEST(SockAnyAddr, ToStr)
+{
+    ToStrHandle<ToStr<SockAnyAddr>> tsh;
+    EXPECT_EQ("unix:/nope", tsh(SockUAddr("/nope"sv)));
+    EXPECT_EQ("0.0.0.0:3949", tsh(Sock4Addr(In4Addr{}, 3949)));
+    EXPECT_EQ("a [::]:356 b",
+              std::format("a {} b", Sock6Addr(In6Addr{}, 356, 0)));
+}
+
 } // namespace stdplus
