Jelajahi Sumber

tests: Add short test for BridgeTree checkpoints.

parazyd 3 tahun lalu
induk
melakukan
ff57e059d5
1 mengubah file dengan 44 tambahan dan 0 penghapusan
  1. 44 0
      tests/bridgetree_checkpoints.rs

+ 44 - 0
tests/bridgetree_checkpoints.rs

@@ -0,0 +1,44 @@
+/* This file is part of DarkFi (https://dark.fi)
+ *
+ * Copyright (C) 2020-2022 Dyne.org foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+use darkfi_sdk::{
+    crypto::{MerkleNode, MerkleTree},
+    incrementalmerkletree::Tree,
+};
+use halo2_proofs::arithmetic::Field;
+use pasta_curves::pallas;
+use rand::rngs::OsRng;
+
+#[test]
+fn bridgetree_checkpoints() {
+    const MAX_CHECKPOINTS: usize = 100;
+    let mut tree = MerkleTree::new(MAX_CHECKPOINTS);
+    let mut roots = vec![];
+
+    for _ in 0..MAX_CHECKPOINTS {
+        let leaf = MerkleNode::from(pallas::Base::random(&mut OsRng));
+        tree.append(&leaf);
+        roots.push(tree.root(0).unwrap());
+        tree.checkpoint();
+    }
+
+    for root in roots.iter().rev() {
+        tree.rewind();
+        assert!(root == &tree.root(0).unwrap());
+    }
+}