[vector] Add initializer_list constructor & tests
diff --git a/src/hb-vector.hh b/src/hb-vector.hh
index 44c174d..d3a5dff 100644
--- a/src/hb-vector.hh
+++ b/src/hb-vector.hh
@@ -31,6 +31,8 @@
 #include "hb-array.hh"
 #include "hb-null.hh"
 
+#include <initializer_list>
+
 
 template <typename Type>
 struct hb_vector_t
@@ -39,9 +41,14 @@
   static constexpr unsigned item_size = hb_static_size (Type);
 
   hb_vector_t ()  { init (); }
-  hb_vector_t (const hb_vector_t &o)
+  hb_vector_t (std::initializer_list<Type> l) : hb_vector_t ()
   {
-    init ();
+    alloc (l.size ());
+    for (auto&& i : l)
+      push (i);
+  }
+  hb_vector_t (const hb_vector_t &o) : hb_vector_t ()
+  {
     alloc (o.length);
     hb_copy (o, *this);
   }
@@ -302,6 +309,10 @@
 template <typename Type>
 struct hb_sorted_vector_t : hb_vector_t<Type>
 {
+  hb_sorted_vector_t () : hb_vector_t<Type> () {}
+  hb_sorted_vector_t (std::initializer_list<Type> l) : hb_vector_t<Type> (l) {}
+  hb_sorted_vector_t (hb_sorted_vector_t& o) : hb_vector_t<Type> (o) {}
+
   hb_sorted_array_t<      Type> as_array ()       { return hb_sorted_array (this->arrayZ, this->length); }
   hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->length); }
 
diff --git a/src/test-algs.cc b/src/test-algs.cc
index f8b8ff6..0f6b1fb 100644
--- a/src/test-algs.cc
+++ b/src/test-algs.cc
@@ -91,5 +91,25 @@
   assert (++hb_inc (x) == 3);
   assert (x == 3);
 
+  {
+    hb_vector_t<int> v1 {1, 2, 3};
+    hb_vector_t<int> v2 {4, 5};
+    hb_swap (v1, v2);
+    assert (v1.length == 2);
+    assert (v1[0] == 4);
+    assert (v2.length == 3);
+    assert (v2[2] == 3);
+  }
+
+  {
+    hb_sorted_vector_t<int> v1 {1, 2, 3};
+    hb_sorted_vector_t<int> v2 {4, 5};
+    hb_swap (v1, v2);
+    assert (v1.length == 2);
+    assert (v1[0] == 4);
+    assert (v2.length == 3);
+    assert (v2[2] == 3);
+  }
+
   return 0;
 }