Select AVX2 even if the data size is not a multiple of 8
diff --git a/test/vectorization_logic.cpp b/test/vectorization_logic.cpp
index 602e9f1..62d3f60 100644
--- a/test/vectorization_logic.cpp
+++ b/test/vectorization_logic.cpp
@@ -258,7 +258,38 @@
 
     VERIFY(test_redux(VectorX(10),
       LinearVectorizedTraversal,NoUnrolling));
+
+    // Some static checks for packet-picking -- see
+    // <https://gitlab.com/libeigen/eigen/merge_requests/46#note_271497656> for context.
+
+    // Any multiple of the packet size itself will result in the normal packet
+    STATIC_CHECK((
+      internal::is_same<typename internal::find_best_packet<Scalar, PacketSize>::type, PacketType>::value
+    ));
+    STATIC_CHECK((
+      internal::is_same<typename internal::find_best_packet<Scalar, PacketSize*2>::type, PacketType>::value
+    ));
+    STATIC_CHECK((
+      internal::is_same<typename internal::find_best_packet<Scalar, PacketSize*5>::type, PacketType>::value
+    ));
+    // Moreover, situations where the size is _not_ a multiple but picking the full packet
+    // is convenient will also work, but only with unaligned vectorize
+    STATIC_CHECK((
+      !(EIGEN_UNALIGNED_VECTORIZE || PacketSize == HalfPacketSize) ||
+      internal::is_same<typename internal::find_best_packet<Scalar, PacketSize*5+1>::type, PacketType>::value
+    ));
+    STATIC_CHECK((
+      !(EIGEN_UNALIGNED_VECTORIZE || PacketSize == HalfPacketSize) ||
+      internal::is_same<typename internal::find_best_packet<Scalar, PacketSize*5+2>::type, PacketType>::value
+    ));
+    // In situations where the picking the full-packet would be detrimental the half-packet
+    // is chosen.
+    STATIC_CHECK((
+      !(PacketSize > 2) ||
+      internal::is_same<typename internal::find_best_packet<Scalar, PacketSize*2-1>::type, HalfPacketType>::value
+    ));
   }
+
 };
 
 template<typename Scalar> struct vectorization_logic<Scalar,false>