|
@@ -0,0 +1,36 @@
|
|
|
+use anchor_lang::{AnchorDeserialize, AnchorSerialize, Discriminator, InstructionData};
|
|
|
+
|
|
|
+#[test]
|
|
|
+fn test_instruction_data() {
|
|
|
+ // Define some test type and implement ser/de, discriminator, and ix data
|
|
|
+ #[derive(Default, AnchorSerialize, AnchorDeserialize, PartialEq, Eq)]
|
|
|
+ struct MyType {
|
|
|
+ foo: [u8; 8],
|
|
|
+ bar: String,
|
|
|
+ }
|
|
|
+ impl Discriminator for MyType {
|
|
|
+ const DISCRIMINATOR: [u8; 8] = [1, 2, 3, 4, 5, 6, 7, 8];
|
|
|
+ }
|
|
|
+ impl InstructionData for MyType {}
|
|
|
+
|
|
|
+ // Initialize some instance of the type
|
|
|
+ let instance = MyType {
|
|
|
+ foo: [0, 2, 4, 6, 8, 10, 12, 14],
|
|
|
+ bar: "sharding sucks".into(),
|
|
|
+ };
|
|
|
+
|
|
|
+ // Serialize using both methods
|
|
|
+ let data = instance.data();
|
|
|
+ let mut write = vec![];
|
|
|
+ instance.write_to(&mut write);
|
|
|
+
|
|
|
+ // Check that one is correct and that they are equal (implies other is correct)
|
|
|
+ let correct_disc = data[0..8] == MyType::DISCRIMINATOR;
|
|
|
+ let correct_data = MyType::deserialize(&mut &data[8..]).is_ok_and(|result| result == instance);
|
|
|
+ let correct_serialization = correct_disc & correct_data;
|
|
|
+ assert!(correct_serialization, "serialization was not correct");
|
|
|
+ assert_eq!(
|
|
|
+ &data, &write,
|
|
|
+ "the different methods produced different serialized representations"
|
|
|
+ );
|
|
|
+}
|