Tom Linton 3 жил өмнө
parent
commit
f66eee7c6d

+ 6 - 1
tests/misc/programs/misc/src/account.rs

@@ -35,4 +35,9 @@ pub struct DataZeroCopy {
 pub struct DataWithFilter {
 pub struct DataWithFilter {
     pub authority: Pubkey,
     pub authority: Pubkey,
     pub filterable: Pubkey,
     pub filterable: Pubkey,
-}
+}
+
+#[account]
+pub struct DataMultidimensionalArray {
+    pub data: [[u8; 10]; 10],
+}

+ 6 - 0
tests/misc/programs/misc/src/context.rs

@@ -252,3 +252,9 @@ pub struct TestInitIfNeeded<'info> {
     pub payer: Signer<'info>,
     pub payer: Signer<'info>,
     pub system_program: Program<'info, System>,
     pub system_program: Program<'info, System>,
 }
 }
+
+#[derive(Accounts)]
+pub struct TestMultidimensionalArray<'info> {
+    #[account(zero)]
+    pub data: Account<'info, DataMultidimensionalArray>,
+}

+ 8 - 0
tests/misc/programs/misc/src/lib.rs

@@ -189,4 +189,12 @@ pub mod misc {
         ctx.accounts.data.data = data;
         ctx.accounts.data.data = data;
         Ok(())
         Ok(())
     }
     }
+
+    pub fn test_multidimensional_array(
+        ctx: Context<TestMultidimensionalArray>,
+        data: [[u8; 10]; 10],
+    ) -> ProgramResult {
+        ctx.accounts.data.data = data;
+        Ok(())
+    }
 }
 }

+ 19 - 0
tests/misc/tests/misc.js

@@ -835,4 +835,23 @@ describe("misc", () => {
     const account = await program.account.dataU16.fetch(ifNeededAcc.publicKey);
     const account = await program.account.dataU16.fetch(ifNeededAcc.publicKey);
     assert.ok(account.data, 3);
     assert.ok(account.data, 3);
   });
   });
+
+  it("Can use multidimensional array", async () => {
+    const array2d = new Array(10).fill(new Array(10).fill(99));
+    const data = anchor.web3.Keypair.generate();
+    const tx = await program.rpc.testMultidimensionalArray(array2d, {
+      accounts: {
+        data: data.publicKey,
+        rent: anchor.web3.SYSVAR_RENT_PUBKEY,
+      },
+      signers: [data],
+      instructions: [
+        await program.account.dataMultidimensionalArray.createInstruction(data),
+      ],
+    });
+    const dataAccount = await program.account.dataMultidimensionalArray.fetch(
+      data.publicKey
+    );
+    assert.deepStrictEqual(dataAccount.data, array2d);
+  });
 });
 });