diff --git a/mutable_tree_test.go b/mutable_tree_test.go index c6862e0ec..ffd2e1e84 100644 --- a/mutable_tree_test.go +++ b/mutable_tree_test.go @@ -1533,3 +1533,39 @@ func TestNoFastStorageUpgrade_Integration_SaveVersion_Load_Iterate_Success(t *te }) }) } + +// TestMutableTree_InitialVersion_FirstVersion demonstrate the un-intuitive behavior, +// when InitialVersion is set the nodes created in the first version are not assigned with expected version number. +func TestMutableTree_InitialVersion_FirstVersion(t *testing.T) { + db := db.NewMemDB() + + initialVersion := int64(1000) + tree, err := NewMutableTreeWithOpts(db, 0, &Options{ + InitialVersion: uint64(initialVersion), + }, true) + require.NoError(t, err) + + _, err = tree.Set([]byte("hello"), []byte("world")) + require.NoError(t, err) + + rootHash, version, err := tree.SaveVersion() + require.NoError(t, err) + require.Equal(t, initialVersion, version) + + // the nodes created at the first version are not assigned with the `InitialVersion` + node, err := tree.ndb.GetNode(rootHash) + require.NoError(t, err) + require.Equal(t, int64(1), node.version) + + _, err = tree.Set([]byte("hello"), []byte("world1")) + require.NoError(t, err) + + rootHash, version, err = tree.SaveVersion() + require.NoError(t, err) + require.Equal(t, initialVersion+1, version) + + // the following versions behaves normally + node, err = tree.ndb.GetNode(rootHash) + require.NoError(t, err) + require.Equal(t, initialVersion+1, node.version) +}