@@ -787,3 +787,72 @@ TEST(packed_int_vector, auto_mixed_operations_stress) {
787787 }
788788 }
789789}
790+
791+ TEST (packed_int_vector, copy_constructor_and_assignment) {
792+ packed_int_vector<uint32_t > vec (5 );
793+
794+ vec.push_back (1 );
795+ vec.push_back (31 );
796+ vec.push_back (7 );
797+
798+ packed_int_vector<uint32_t > copy{vec};
799+
800+ EXPECT_EQ (copy.bits (), 5 );
801+ EXPECT_THAT (copy.unpack (), ElementsAre (1 , 31 , 7 ));
802+
803+ copy[1 ] = 3 ;
804+
805+ EXPECT_THAT (vec.unpack (), ElementsAre (1 , 31 , 7 ));
806+ EXPECT_THAT (copy.unpack (), ElementsAre (1 , 3 , 7 ));
807+
808+ packed_int_vector<uint32_t > assigned (2 );
809+ assigned = vec;
810+
811+ EXPECT_EQ (assigned.bits (), 5 );
812+ EXPECT_THAT (assigned.unpack (), ElementsAre (1 , 31 , 7 ));
813+
814+ assigned[0 ] = 0 ;
815+
816+ EXPECT_THAT (vec.unpack (), ElementsAre (1 , 31 , 7 ));
817+ EXPECT_THAT (assigned.unpack (), ElementsAre (0 , 31 , 7 ));
818+ }
819+
820+ TEST (packed_int_vector, move_constructor_and_assignment) {
821+ packed_int_vector<uint32_t > vec (5 );
822+
823+ vec.push_back (1 );
824+ vec.push_back (31 );
825+ vec.push_back (7 );
826+
827+ packed_int_vector<uint32_t > moved{std::move (vec)};
828+
829+ EXPECT_EQ (moved.bits (), 5 );
830+ EXPECT_THAT (moved.unpack (), ElementsAre (1 , 31 , 7 ));
831+
832+ packed_int_vector<uint32_t > other (2 );
833+ other.push_back (1 );
834+ other.push_back (2 );
835+
836+ other = std::move (moved);
837+
838+ EXPECT_EQ (other.bits (), 5 );
839+ EXPECT_THAT (other.unpack (), ElementsAre (1 , 31 , 7 ));
840+ }
841+
842+ TEST (packed_int_vector, auto_copy_and_move_preserve_bit_width) {
843+ auto_packed_int_vector<uint32_t > vec (0 );
844+
845+ vec.push_back (1 );
846+ vec.push_back (31 );
847+ vec.push_back (7 );
848+
849+ EXPECT_EQ (vec.bits (), 5 );
850+
851+ auto_packed_int_vector<uint32_t > copy{vec};
852+ EXPECT_EQ (copy.bits (), 5 );
853+ EXPECT_THAT (copy.unpack (), ElementsAre (1 , 31 , 7 ));
854+
855+ auto_packed_int_vector<uint32_t > moved{std::move (copy)};
856+ EXPECT_EQ (moved.bits (), 5 );
857+ EXPECT_THAT (moved.unpack (), ElementsAre (1 , 31 , 7 ));
858+ }
0 commit comments