@@ -2002,3 +2002,46 @@ fn test_model_iter() {
2002
2002
vec![ ast:: Dynamic :: new_const( & ctx, "a" , & Sort :: int( & ctx) ) ]
2003
2003
) ;
2004
2004
}
2005
+
2006
+ #[ test]
2007
+ fn test_bitvector_from_bit_vec ( ) {
2008
+ let cfg = Config :: new ( ) ;
2009
+ let ctx = Context :: new ( & cfg) ;
2010
+
2011
+ // 0b01010101
2012
+ let bit_vec = vec ! [ true , false , true , false , true , false , true , false ] ;
2013
+
2014
+ let a = ast:: BV :: new_const ( & ctx, "a" , 8 ) ;
2015
+ let b = ast:: BV :: from_bit_vec ( & ctx, bit_vec) . unwrap ( ) ;
2016
+
2017
+ let solver = Solver :: new ( & ctx) ;
2018
+ solver. assert ( & a. _eq ( & b) ) ;
2019
+ assert_eq ! ( solver. check( ) , SatResult :: Sat ) ;
2020
+
2021
+ let model = solver. get_model ( ) . unwrap ( ) ;
2022
+ let av = model. eval ( & a, true ) . unwrap ( ) . to_string ( ) ;
2023
+ assert_eq ! ( av, "#x55" . to_string( ) ) ;
2024
+ }
2025
+
2026
+ #[ test]
2027
+ fn test_bitvector_from_byte_vec ( ) {
2028
+ let cfg = Config :: new ( ) ;
2029
+ let ctx = Context :: new ( & cfg) ;
2030
+
2031
+ // 0x55AA
2032
+ // 85 = 0x55 = 01010101
2033
+ // 170 = 0xAA = 10101010
2034
+ // The array should be ordered like this (at least that is how it works in rust internally)
2035
+ let byte_vec = vec ! [ 170 , 85 ] ;
2036
+
2037
+ let a = ast:: BV :: new_const ( & ctx, "a" , 16 ) ;
2038
+ let b = ast:: BV :: from_byte_vec ( & ctx, byte_vec) . unwrap ( ) ;
2039
+
2040
+ let solver = Solver :: new ( & ctx) ;
2041
+ solver. assert ( & a. _eq ( & b) ) ;
2042
+ assert_eq ! ( solver. check( ) , SatResult :: Sat ) ;
2043
+
2044
+ let model = solver. get_model ( ) . unwrap ( ) ;
2045
+ let av = model. eval ( & a, true ) . unwrap ( ) . to_string ( ) ;
2046
+ assert_eq ! ( av, "#x55aa" . to_string( ) ) ;
2047
+ }
0 commit comments