extern crate arrayfire; extern crate arrayfire_serde; extern crate serde; extern crate serde_test; use arrayfire::{Array, DType, Dim4}; use serde_test::{assert_ser_tokens, Deserializer, Token}; use arrayfire_serde::{deserialize, Ser}; #[test] fn test_dim4() { let dim = Dim4::new(&[1, 2, 3, 4]); let tokens = [ Token::Tuple { len: 4 }, Token::U64(1), Token::U64(2), Token::U64(3), Token::U64(4), Token::TupleEnd, ]; assert_ser_tokens(&Ser::new(&dim), &tokens); let mut de = Deserializer::new(&tokens); let deserialized = deserialize::(&mut de).unwrap(); assert_eq!(&deserialized, &dim); assert_eq!(de.next_token_opt(), None); } #[test] fn test_dtype() { let dtype = DType::F64; let tokens = [Token::U8(2)]; assert_ser_tokens(&Ser::new(&dtype), &tokens); let mut de = Deserializer::new(&tokens); let deserialized = deserialize::(&mut de).unwrap(); assert_eq!(&deserialized, &dtype); assert_eq!(de.next_token_opt(), None); } #[test] fn test_array() { let dim = Dim4::new(&[2, 2, 1, 1]); let values: [f64; 4] = [1.0, 2.0, 3.0, 4.0]; let array = Array::new::(&values, dim); let tokens = [ Token::Tuple { len: 3 }, Token::U8(2), Token::Tuple { len: 4 }, Token::U64(2), Token::U64(2), Token::U64(1), Token::U64(1), Token::TupleEnd, Token::Seq { len: Some(4) }, Token::F64(1.0), Token::F64(2.0), Token::F64(3.0), Token::F64(4.0), Token::SeqEnd, Token::TupleEnd, ]; assert_ser_tokens(&Ser::new(&array), &tokens); let mut de = Deserializer::new(&tokens); let de_array = deserialize::(&mut de).unwrap(); assert_eq!(de.next_token_opt(), None); assert_eq!(array.get_type(), de_array.get_type()); assert_eq!(array.dims(), de_array.dims()); let mut array_vec: Vec = vec![0f64; array.elements()]; array.host(&mut array_vec.as_mut_slice()); let mut de_array_vec: Vec = vec![0f64; de_array.elements()]; de_array.host(&mut de_array_vec.as_mut_slice()); assert_eq!(array_vec, de_array_vec); }