This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/iceberg-rust.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new 1dbc2392 deploy: 50cd2ab65895a07b0d356b61200645340482e127
1dbc2392 is described below

commit 1dbc2392d0e1a91d9d885a50c9a404527b6e4a3f
Author: liurenjie1024 <[email protected]>
AuthorDate: Fri Aug 8 00:34:24 2025 +0000

    deploy: 50cd2ab65895a07b0d356b61200645340482e127
---
 .../fn.from_datafusion_error.html                  |   2 +-
 api/iceberg_datafusion/fn.to_datafusion_error.html |   2 +-
 api/iceberg_datafusion/index.html                  |   2 +-
 api/iceberg_datafusion/physical_plan/index.html    |   2 +-
 .../physical_plan/struct.IcebergTableScan.html     |   4 +-
 .../struct.IcebergCatalogProvider.html             |   6 +-
 api/iceberg_datafusion/table/index.html            |   4 +-
 .../table/struct.IcebergTableProvider.html         |  10 +-
 api/src/iceberg/delete_vector.rs.html              | 277 +++++++++++++--------
 9 files changed, 194 insertions(+), 115 deletions(-)

diff --git a/api/iceberg_datafusion/fn.from_datafusion_error.html 
b/api/iceberg_datafusion/fn.from_datafusion_error.html
index cc54914f..16fc65f5 100644
--- a/api/iceberg_datafusion/fn.from_datafusion_error.html
+++ b/api/iceberg_datafusion/fn.from_datafusion_error.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Converts a 
datafusion error into an iceberg error."><title>from_datafusion_error in 
iceberg_datafusion - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans
 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Converts a 
datafusion error into an iceberg error."><title>from_datafusion_error in 
iceberg_datafusion - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans
 [...]
 </div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg_datafusion/fn.to_datafusion_error.html 
b/api/iceberg_datafusion/fn.to_datafusion_error.html
index 82303d5d..6762083c 100644
--- a/api/iceberg_datafusion/fn.to_datafusion_error.html
+++ b/api/iceberg_datafusion/fn.to_datafusion_error.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Converts 
an iceberg error into a datafusion error."><title>to_datafusion_error in 
iceberg_datafusion - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-R
 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Converts 
an iceberg error into a datafusion error."><title>to_datafusion_error in 
iceberg_datafusion - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-R
 [...]
 </div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg_datafusion/index.html 
b/api/iceberg_datafusion/index.html
index 255243a6..826cc8e9 100644
--- a/api/iceberg_datafusion/index.html
+++ b/api/iceberg_datafusion/index.html
@@ -1,2 +1,2 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="API 
documentation for the Rust `iceberg_datafusion` 
crate."><title>iceberg_datafusion - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade
 [...]
-within an Iceberg [<code>Catalog</code>].</dd></dl><h2 id="functions" 
class="section-header">Functions<a href="#functions" 
class="anchor">§</a></h2><dl class="item-table"><dt><a class="fn" 
href="fn.from_datafusion_error.html" title="fn 
iceberg_datafusion::from_datafusion_error">from_<wbr>datafusion_<wbr>error</a></dt><dd>Converts
 a datafusion error into an iceberg error.</dd><dt><a class="fn" 
href="fn.to_datafusion_error.html" title="fn 
iceberg_datafusion::to_datafusion_error">to_<wbr>da [...]
\ No newline at end of file
+within an Iceberg <a href="../iceberg/catalog/trait.Catalog.html" title="trait 
iceberg::catalog::Catalog"><code>Catalog</code></a>.</dd></dl><h2 
id="functions" class="section-header">Functions<a href="#functions" 
class="anchor">§</a></h2><dl class="item-table"><dt><a class="fn" 
href="fn.from_datafusion_error.html" title="fn 
iceberg_datafusion::from_datafusion_error">from_<wbr>datafusion_<wbr>error</a></dt><dd>Converts
 a datafusion error into an iceberg error.</dd><dt><a class="fn" href=" [...]
\ No newline at end of file
diff --git a/api/iceberg_datafusion/physical_plan/index.html 
b/api/iceberg_datafusion/physical_plan/index.html
index 128c35d6..012ccbf0 100644
--- a/api/iceberg_datafusion/physical_plan/index.html
+++ b/api/iceberg_datafusion/physical_plan/index.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="API 
documentation for the Rust `physical_plan` mod in crate 
`iceberg_datafusion`."><title>iceberg_datafusion::physical_plan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81
 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="API 
documentation for the Rust `physical_plan` mod in crate 
`iceberg_datafusion`."><title>iceberg_datafusion::physical_plan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81
 [...]
 necessary details and computed properties required for execution 
planning.</dd></dl></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg_datafusion/physical_plan/struct.IcebergTableScan.html 
b/api/iceberg_datafusion/physical_plan/struct.IcebergTableScan.html
index 9054cb07..155f31ac 100644
--- a/api/iceberg_datafusion/physical_plan/struct.IcebergTableScan.html
+++ b/api/iceberg_datafusion/physical_plan/struct.IcebergTableScan.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Manages 
the scanning process of an Iceberg `Table`, encapsulating the necessary details 
and computed properties required for execution 
planning."><title>IcebergTableScan in iceberg_datafusion::physical_plan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertA 
[...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Manages 
the scanning process of an Iceberg `Table`, encapsulating the necessary details 
and computed properties required for execution 
planning."><title>IcebergTableScan in iceberg_datafusion::physical_plan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertA 
[...]
 necessary details and computed properties required for execution planning.</p>
-</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-IcebergTableScan" 
class="impl"><a class="src rightside" 
href="../../src/iceberg_datafusion/physical_plan/scan.rs.html#56-110">Source</a><a
 href="#impl-IcebergTableScan" class="anchor">§</a><h3 class="code-header">impl 
<a class="struct" href="struct.Icebe [...]
+</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-IcebergTableScan" 
class="impl"><a class="src rightside" 
href="../../src/iceberg_datafusion/physical_plan/scan.rs.html#56-110">Source</a><a
 href="#impl-IcebergTableScan" class="anchor">§</a><h3 class="code-header">impl 
<a class="struct" href="struct.Icebe [...]
 different from the default one <a>Read 
more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section 
id="impl-ExecutionPlan-for-IcebergTableScan" class="impl"><a class="src 
rightside" 
href="../../src/iceberg_datafusion/physical_plan/scan.rs.html#112-154">Source</a><a
 href="#impl-ExecutionPlan-for-IcebergTableScan" class="anchor">§</a><h3 
class="code-header">impl ExecutionPlan for <a class="struct" 
href="struct.IcebergTableScan.html" title="str [...]
 downcast to a specific implementation.</div></details><details class="toggle 
method-toggle" open><summary><section id="method.children" class="method 
trait-impl"><a class="src rightside" 
href="../../src/iceberg_datafusion/physical_plan/scan.rs.html#121-123">Source</a><a
 href="#method.children" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">children</a>(&amp;self) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html"; 
title="struct alloc:: [...]
 The returned list will be empty for leaf nodes such as scans, will contain
diff --git a/api/iceberg_datafusion/struct.IcebergCatalogProvider.html 
b/api/iceberg_datafusion/struct.IcebergCatalogProvider.html
index 7dd1dde9..95f9d45b 100644
--- a/api/iceberg_datafusion/struct.IcebergCatalogProvider.html
+++ b/api/iceberg_datafusion/struct.IcebergCatalogProvider.html
@@ -1,10 +1,10 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Provides 
an interface to manage and access multiple schemas within an Iceberg 
`Catalog`."><title>IcebergCatalogProvider in iceberg_datafusion - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,
 [...]
-within an Iceberg [<code>Catalog</code>].</p>
+within an Iceberg <a href="../iceberg/catalog/trait.Catalog.html" title="trait 
iceberg::catalog::Catalog"><code>Catalog</code></a>.</p>
 <p>Acts as a centralized catalog provider that aggregates
 multiple [<code>SchemaProvider</code>], each associated with distinct 
namespaces.</p>
-</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-IcebergCatalogProvider" 
class="impl"><a class="src rightside" 
href="../src/iceberg_datafusion/catalog.rs.html#41-84">Source</a><a 
href="#impl-IcebergCatalogProvider" class="anchor">§</a><h3 
class="code-header">impl <a class="struct" href="struct.IcebergC [...]
+</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-IcebergCatalogProvider" 
class="impl"><a class="src rightside" 
href="../src/iceberg_datafusion/catalog.rs.html#41-84">Source</a><a 
href="#impl-IcebergCatalogProvider" class="anchor">§</a><h3 
class="code-header">impl <a class="struct" href="struct.IcebergC [...]
 using the given client to fetch and initialize schema providers for
-each namespace in the Iceberg [<code>Catalog</code>].</p>
+each namespace in the Iceberg <a href="../iceberg/catalog/trait.Catalog.html" 
title="trait iceberg::catalog::Catalog"><code>Catalog</code></a>.</p>
 <p>This method retrieves the list of namespace names
 attempts to create a schema provider for each namespace, and
 collects these providers into a <code>HashMap</code>.</p>
diff --git a/api/iceberg_datafusion/table/index.html 
b/api/iceberg_datafusion/table/index.html
index e16a829f..f9ea6422 100644
--- a/api/iceberg_datafusion/table/index.html
+++ b/api/iceberg_datafusion/table/index.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="API 
documentation for the Rust `table` mod in crate 
`iceberg_datafusion`."><title>iceberg_datafusion::table - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,Fir
 [...]
-managing access to a 
[<code>Table</code>].</dd></dl></section></div></main></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="API 
documentation for the Rust `table` mod in crate 
`iceberg_datafusion`."><title>iceberg_datafusion::table - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,Fir
 [...]
+managing access to a <a href="../../iceberg/table/struct.Table.html" 
title="struct 
iceberg::table::Table"><code>Table</code></a>.</dd></dl></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg_datafusion/table/struct.IcebergTableProvider.html 
b/api/iceberg_datafusion/table/struct.IcebergTableProvider.html
index 7dec33be..506a0977 100644
--- a/api/iceberg_datafusion/table/struct.IcebergTableProvider.html
+++ b/api/iceberg_datafusion/table/struct.IcebergTableProvider.html
@@ -1,11 +1,11 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Represents 
a `TableProvider` for the Iceberg `Catalog`, managing access to a 
`Table`."><title>IcebergTableProvider in iceberg_datafusion::table - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff
 [...]
-managing access to a [<code>Table</code>].</p>
-</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-IcebergTableProvider" 
class="impl"><a class="src rightside" 
href="../../src/iceberg_datafusion/table/mod.rs.html#51-120">Source</a><a 
href="#impl-IcebergTableProvider" class="anchor">§</a><h3 
class="code-header">impl <a class="struct" href="struct.Iceber [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Represents 
a `TableProvider` for the Iceberg `Catalog`, managing access to a 
`Table`."><title>IcebergTableProvider in iceberg_datafusion::table - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff
 [...]
+managing access to a <a href="../../iceberg/table/struct.Table.html" 
title="struct iceberg::table::Table"><code>Table</code></a>.</p>
+</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-IcebergTableProvider" 
class="impl"><a class="src rightside" 
href="../../src/iceberg_datafusion/table/mod.rs.html#51-120">Source</a><a 
href="#impl-IcebergTableProvider" class="anchor">§</a><h3 
class="code-header">impl <a class="struct" href="struct.Iceber [...]
 using the given table. Can be used to create a table provider from an existing 
table regardless of the catalog implementation.</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.try_new_from_table_snapshot" class="method"><a class="src rightside" 
href="../../src/iceberg_datafusion/table/mod.rs.html#92-112">Source</a><h4 
class="code-header">pub async fn <a href="#method.try_new_from_table_snapshot" 
class="fn">try_new_from_table_snapshot</a>(
-    table: Table,
+    table: <a class="struct" href="../../iceberg/table/struct.Table.html" 
title="struct iceberg::table::Table">Table</a>,
     snapshot_id: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.i64.html";>i64</a>,
-) -&gt; Result&lt;Self&gt;</h4></section></summary><div 
class="docblock"><p>Asynchronously tries to construct a new <a 
href="struct.IcebergTableProvider.html" title="struct 
iceberg_datafusion::table::IcebergTableProvider"><code>IcebergTableProvider</code></a>
+) -&gt; <a class="type" href="../../iceberg/error/type.Result.html" 
title="type 
iceberg::error::Result">Result</a>&lt;Self&gt;</h4></section></summary><div 
class="docblock"><p>Asynchronously tries to construct a new <a 
href="struct.IcebergTableProvider.html" title="struct 
iceberg_datafusion::table::IcebergTableProvider"><code>IcebergTableProvider</code></a>
 using a specific snapshot of the given table. Can be used to create a table 
provider from an existing table regardless of the catalog implementation.</p>
 </div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-IcebergTableProvider" class="impl"><a class="src rightside" 
href="../../src/iceberg_datafusion/table/mod.rs.html#41">Source</a><a 
href="#impl-Clone-for-IcebergTableProvider" class="anchor">§</a><h3  [...]
 downcast to a specific implementation.</div></details><details class="toggle 
method-toggle" open><summary><section id="method.schema" class="method 
trait-impl"><a class="src rightside" 
href="../../src/iceberg_datafusion/table/mod.rs.html#128-130">Source</a><a 
href="#method.schema" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</a>(&amp;self) -&gt; 
ArrowSchemaRef</h4></section></summary><div class='docblock'>Get a reference to 
the schema for this table</div></details> [...]
diff --git a/api/src/iceberg/delete_vector.rs.html 
b/api/src/iceberg/delete_vector.rs.html
index 1f641061..678d0307 100644
--- a/api/src/iceberg/delete_vector.rs.html
+++ b/api/src/iceberg/delete_vector.rs.html
@@ -21,102 +21,181 @@
 <a href=#21 id=21 data-nosnippet>21</a><span class="kw">use 
</span>roaring::bitmap::Iter;
 <a href=#22 id=22 data-nosnippet>22</a><span class="kw">use 
</span>roaring::treemap::BitmapIter;
 <a href=#23 id=23 data-nosnippet>23</a>
-<a href=#24 id=24 data-nosnippet>24</a><span class="attr">#[derive(Debug, 
Default)]
-<a href=#25 id=25 data-nosnippet>25</a></span><span class="kw">pub struct 
</span>DeleteVector {
-<a href=#26 id=26 data-nosnippet>26</a>    inner: RoaringTreemap,
-<a href=#27 id=27 data-nosnippet>27</a>}
-<a href=#28 id=28 data-nosnippet>28</a>
-<a href=#29 id=29 data-nosnippet>29</a><span class="kw">impl 
</span>DeleteVector {
-<a href=#30 id=30 data-nosnippet>30</a>    <span class="attr">#[allow(unused)]
-<a href=#31 id=31 data-nosnippet>31</a>    </span><span 
class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn 
</span>new(roaring_treemap: RoaringTreemap) -&gt; DeleteVector {
-<a href=#32 id=32 data-nosnippet>32</a>        DeleteVector {
-<a href=#33 id=33 data-nosnippet>33</a>            inner: roaring_treemap,
-<a href=#34 id=34 data-nosnippet>34</a>        }
-<a href=#35 id=35 data-nosnippet>35</a>    }
-<a href=#36 id=36 data-nosnippet>36</a>
-<a href=#37 id=37 data-nosnippet>37</a>    <span class="kw">pub fn 
</span>iter(<span class="kw-2">&amp;</span><span class="self">self</span>) 
-&gt; DeleteVectorIterator {
-<a href=#38 id=38 data-nosnippet>38</a>        <span class="kw">let 
</span>outer = <span class="self">self</span>.inner.bitmaps();
-<a href=#39 id=39 data-nosnippet>39</a>        DeleteVectorIterator { outer, 
inner: <span class="prelude-val">None </span>}
-<a href=#40 id=40 data-nosnippet>40</a>    }
-<a href=#41 id=41 data-nosnippet>41</a>
-<a href=#42 id=42 data-nosnippet>42</a>    <span class="kw">pub fn 
</span>insert(<span class="kw-2">&amp;mut </span><span 
class="self">self</span>, pos: u64) -&gt; bool {
-<a href=#43 id=43 data-nosnippet>43</a>        <span 
class="self">self</span>.inner.insert(pos)
-<a href=#44 id=44 data-nosnippet>44</a>    }
-<a href=#45 id=45 data-nosnippet>45</a>
-<a href=#46 id=46 data-nosnippet>46</a>    <span class="attr">#[allow(unused)]
-<a href=#47 id=47 data-nosnippet>47</a>    </span><span class="kw">pub fn 
</span>len(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; 
u64 {
-<a href=#48 id=48 data-nosnippet>48</a>        <span 
class="self">self</span>.inner.len()
-<a href=#49 id=49 data-nosnippet>49</a>    }
-<a href=#50 id=50 data-nosnippet>50</a>}
-<a href=#51 id=51 data-nosnippet>51</a>
-<a href=#52 id=52 data-nosnippet>52</a><span class="comment">// Ideally, we'd 
just wrap `roaring::RoaringTreemap`'s iterator, `roaring::treemap::Iter` here.
-<a href=#53 id=53 data-nosnippet>53</a>// But right now, it does not have a 
corresponding implementation of `roaring::bitmap::Iter::advance_to`,
-<a href=#54 id=54 data-nosnippet>54</a>// which is very handy in 
ArrowReader::build_deletes_row_selection.
-<a href=#55 id=55 data-nosnippet>55</a>// There is a PR open on roaring to add 
this (https://github.com/RoaringBitmap/roaring-rs/pull/314)
-<a href=#56 id=56 data-nosnippet>56</a>// and if that gets merged then we can 
simplify `DeleteVectorIterator` here, refactoring `advance_to`
-<a href=#57 id=57 data-nosnippet>57</a>// to just a wrapper around the 
underlying iterator's method.
-<a href=#58 id=58 data-nosnippet>58</a></span><span class="kw">pub struct 
</span>DeleteVectorIterator&lt;<span class="lifetime">'a</span>&gt; {
-<a href=#59 id=59 data-nosnippet>59</a>    <span class="comment">// NB: 
`BitMapIter` was only exposed publicly in 
https://github.com/RoaringBitmap/roaring-rs/pull/316
-<a href=#60 id=60 data-nosnippet>60</a>    // which is not yet released. As a 
consequence our Cargo.toml temporarily uses a git reference for
-<a href=#61 id=61 data-nosnippet>61</a>    // the roaring dependency.
-<a href=#62 id=62 data-nosnippet>62</a>    </span>outer: BitmapIter&lt;<span 
class="lifetime">'a</span>&gt;,
-<a href=#63 id=63 data-nosnippet>63</a>    inner: <span 
class="prelude-ty">Option</span>&lt;DeleteVectorIteratorInner&lt;<span 
class="lifetime">'a</span>&gt;&gt;,
-<a href=#64 id=64 data-nosnippet>64</a>}
-<a href=#65 id=65 data-nosnippet>65</a>
-<a href=#66 id=66 data-nosnippet>66</a><span class="kw">struct 
</span>DeleteVectorIteratorInner&lt;<span class="lifetime">'a</span>&gt; {
-<a href=#67 id=67 data-nosnippet>67</a>    high_bits: u32,
-<a href=#68 id=68 data-nosnippet>68</a>    bitmap_iter: Iter&lt;<span 
class="lifetime">'a</span>&gt;,
-<a href=#69 id=69 data-nosnippet>69</a>}
-<a href=#70 id=70 data-nosnippet>70</a>
-<a href=#71 id=71 data-nosnippet>71</a><span class="kw">impl </span>Iterator 
<span class="kw">for </span>DeleteVectorIterator&lt;<span 
class="lifetime">'_</span>&gt; {
-<a href=#72 id=72 data-nosnippet>72</a>    <span class="kw">type </span>Item = 
u64;
-<a href=#73 id=73 data-nosnippet>73</a>
-<a href=#74 id=74 data-nosnippet>74</a>    <span class="kw">fn 
</span>next(<span class="kw-2">&amp;mut </span><span class="self">self</span>) 
-&gt; <span class="prelude-ty">Option</span>&lt;<span 
class="self">Self</span>::Item&gt; {
-<a href=#75 id=75 data-nosnippet>75</a>        <span class="kw">if let 
</span><span class="prelude-val">Some</span>(inner) = <span 
class="kw-2">&amp;mut </span><span class="self">self</span>.inner {
-<a href=#76 id=76 data-nosnippet>76</a>            <span class="kw">if let 
</span><span class="prelude-val">Some</span>(inner_next) = 
inner.bitmap_iter.next() {
-<a href=#77 id=77 data-nosnippet>77</a>                <span class="kw">return 
</span><span class="prelude-val">Some</span>(u64::from(inner.high_bits) 
&lt;&lt; <span class="number">32 </span>| u64::from(inner_next));
-<a href=#78 id=78 data-nosnippet>78</a>            }
-<a href=#79 id=79 data-nosnippet>79</a>        }
-<a href=#80 id=80 data-nosnippet>80</a>
-<a href=#81 id=81 data-nosnippet>81</a>        <span class="kw">if let 
</span><span class="prelude-val">Some</span>((high_bits, next_bitmap)) = <span 
class="self">self</span>.outer.next() {
-<a href=#82 id=82 data-nosnippet>82</a>            <span 
class="self">self</span>.inner = <span 
class="prelude-val">Some</span>(DeleteVectorIteratorInner {
-<a href=#83 id=83 data-nosnippet>83</a>                high_bits,
-<a href=#84 id=84 data-nosnippet>84</a>                bitmap_iter: 
next_bitmap.iter(),
-<a href=#85 id=85 data-nosnippet>85</a>            })
-<a href=#86 id=86 data-nosnippet>86</a>        } <span class="kw">else </span>{
-<a href=#87 id=87 data-nosnippet>87</a>            <span class="kw">return 
</span><span class="prelude-val">None</span>;
-<a href=#88 id=88 data-nosnippet>88</a>        }
-<a href=#89 id=89 data-nosnippet>89</a>
-<a href=#90 id=90 data-nosnippet>90</a>        <span 
class="self">self</span>.next()
-<a href=#91 id=91 data-nosnippet>91</a>    }
-<a href=#92 id=92 data-nosnippet>92</a>}
-<a href=#93 id=93 data-nosnippet>93</a>
-<a href=#94 id=94 data-nosnippet>94</a><span class="kw">impl 
</span>DeleteVectorIterator&lt;<span class="lifetime">'_</span>&gt; {
-<a href=#95 id=95 data-nosnippet>95</a>    <span class="kw">pub fn 
</span>advance_to(<span class="kw-2">&amp;mut </span><span 
class="self">self</span>, pos: u64) {
-<a href=#96 id=96 data-nosnippet>96</a>        <span class="kw">let </span>hi 
= (pos &gt;&gt; <span class="number">32</span>) <span class="kw">as </span>u32;
-<a href=#97 id=97 data-nosnippet>97</a>        <span class="kw">let </span>lo 
= pos <span class="kw">as </span>u32;
-<a href=#98 id=98 data-nosnippet>98</a>
-<a href=#99 id=99 data-nosnippet>99</a>        <span class="kw">let 
</span><span class="prelude-val">Some</span>(<span class="kw-2">ref mut 
</span>inner) = <span class="self">self</span>.inner <span class="kw">else 
</span>{
-<a href=#100 id=100 data-nosnippet>100</a>            <span 
class="kw">return</span>;
-<a href=#101 id=101 data-nosnippet>101</a>        };
-<a href=#102 id=102 data-nosnippet>102</a>
-<a href=#103 id=103 data-nosnippet>103</a>        <span class="kw">while 
</span>inner.high_bits &lt; hi {
-<a href=#104 id=104 data-nosnippet>104</a>            <span class="kw">let 
</span><span class="prelude-val">Some</span>((next_hi, next_bitmap)) = <span 
class="self">self</span>.outer.next() <span class="kw">else </span>{
-<a href=#105 id=105 data-nosnippet>105</a>                <span 
class="kw">return</span>;
-<a href=#106 id=106 data-nosnippet>106</a>            };
-<a href=#107 id=107 data-nosnippet>107</a>
-<a href=#108 id=108 data-nosnippet>108</a>            <span 
class="kw-2">*</span>inner = DeleteVectorIteratorInner {
-<a href=#109 id=109 data-nosnippet>109</a>                high_bits: next_hi,
-<a href=#110 id=110 data-nosnippet>110</a>                bitmap_iter: 
next_bitmap.iter(),
-<a href=#111 id=111 data-nosnippet>111</a>            }
-<a href=#112 id=112 data-nosnippet>112</a>        }
-<a href=#113 id=113 data-nosnippet>113</a>
-<a href=#114 id=114 data-nosnippet>114</a>        
inner.bitmap_iter.advance_to(lo);
-<a href=#115 id=115 data-nosnippet>115</a>    }
-<a href=#116 id=116 data-nosnippet>116</a>}
-<a href=#117 id=117 data-nosnippet>117</a>
-<a href=#118 id=118 data-nosnippet>118</a><span class="kw">impl 
</span>BitOrAssign <span class="kw">for </span>DeleteVector {
-<a href=#119 id=119 data-nosnippet>119</a>    <span class="kw">fn 
</span>bitor_assign(<span class="kw-2">&amp;mut </span><span 
class="self">self</span>, other: <span class="self">Self</span>) {
-<a href=#120 id=120 data-nosnippet>120</a>        <span 
class="self">self</span>.inner.bitor_assign(<span 
class="kw-2">&amp;</span>other.inner);
-<a href=#121 id=121 data-nosnippet>121</a>    }
-<a href=#122 id=122 
data-nosnippet>122</a>}</code></pre></div></section></main></body></html>
\ No newline at end of file
+<a href=#24 id=24 data-nosnippet>24</a><span class="kw">use 
crate</span>::{Error, ErrorKind, <span class="prelude-ty">Result</span>};
+<a href=#25 id=25 data-nosnippet>25</a>
+<a href=#26 id=26 data-nosnippet>26</a><span class="attr">#[derive(Debug, 
Default)]
+<a href=#27 id=27 data-nosnippet>27</a></span><span class="kw">pub struct 
</span>DeleteVector {
+<a href=#28 id=28 data-nosnippet>28</a>    inner: RoaringTreemap,
+<a href=#29 id=29 data-nosnippet>29</a>}
+<a href=#30 id=30 data-nosnippet>30</a>
+<a href=#31 id=31 data-nosnippet>31</a><span class="kw">impl 
</span>DeleteVector {
+<a href=#32 id=32 data-nosnippet>32</a>    <span class="attr">#[allow(unused)]
+<a href=#33 id=33 data-nosnippet>33</a>    </span><span class="kw">pub fn 
</span>new(roaring_treemap: RoaringTreemap) -&gt; DeleteVector {
+<a href=#34 id=34 data-nosnippet>34</a>        DeleteVector {
+<a href=#35 id=35 data-nosnippet>35</a>            inner: roaring_treemap,
+<a href=#36 id=36 data-nosnippet>36</a>        }
+<a href=#37 id=37 data-nosnippet>37</a>    }
+<a href=#38 id=38 data-nosnippet>38</a>
+<a href=#39 id=39 data-nosnippet>39</a>    <span class="kw">pub fn 
</span>iter(<span class="kw-2">&amp;</span><span class="self">self</span>) 
-&gt; DeleteVectorIterator {
+<a href=#40 id=40 data-nosnippet>40</a>        <span class="kw">let 
</span>outer = <span class="self">self</span>.inner.bitmaps();
+<a href=#41 id=41 data-nosnippet>41</a>        DeleteVectorIterator { outer, 
inner: <span class="prelude-val">None </span>}
+<a href=#42 id=42 data-nosnippet>42</a>    }
+<a href=#43 id=43 data-nosnippet>43</a>
+<a href=#44 id=44 data-nosnippet>44</a>    <span class="kw">pub fn 
</span>insert(<span class="kw-2">&amp;mut </span><span 
class="self">self</span>, pos: u64) -&gt; bool {
+<a href=#45 id=45 data-nosnippet>45</a>        <span 
class="self">self</span>.inner.insert(pos)
+<a href=#46 id=46 data-nosnippet>46</a>    }
+<a href=#47 id=47 data-nosnippet>47</a>
+<a href=#48 id=48 data-nosnippet>48</a>    <span class="doccomment">/// Marks 
the given `positions` as deleted and returns the number of elements appended.
+<a href=#49 id=49 data-nosnippet>49</a>    ///
+<a href=#50 id=50 data-nosnippet>50</a>    /// The input slice must be 
strictly ordered in ascending order, and every value must be greater than all 
existing values already in the set.
+<a href=#51 id=51 data-nosnippet>51</a>    ///
+<a href=#52 id=52 data-nosnippet>52</a>    /// # Errors
+<a href=#53 id=53 data-nosnippet>53</a>    ///
+<a href=#54 id=54 data-nosnippet>54</a>    /// Returns an error if the 
precondition is not met.
+<a href=#55 id=55 data-nosnippet>55</a>    </span><span 
class="attr">#[allow(dead_code)]
+<a href=#56 id=56 data-nosnippet>56</a>    </span><span class="kw">pub fn 
</span>insert_positions(<span class="kw-2">&amp;mut </span><span 
class="self">self</span>, positions: <span class="kw-2">&amp;</span>[u64]) 
-&gt; <span class="prelude-ty">Result</span>&lt;usize&gt; {
+<a href=#57 id=57 data-nosnippet>57</a>        <span class="kw">if let 
</span><span class="prelude-val">Err</span>(err) = <span 
class="self">self</span>.inner.append(positions.iter().copied()) {
+<a href=#58 id=58 data-nosnippet>58</a>            <span class="kw">return 
</span><span class="prelude-val">Err</span>(Error::new(
+<a href=#59 id=59 data-nosnippet>59</a>                
ErrorKind::PreconditionFailed,
+<a href=#60 id=60 data-nosnippet>60</a>                <span 
class="string">"failed to marks rows as deleted"</span>.to_string(),
+<a href=#61 id=61 data-nosnippet>61</a>            )
+<a href=#62 id=62 data-nosnippet>62</a>            .with_source(err));
+<a href=#63 id=63 data-nosnippet>63</a>        }
+<a href=#64 id=64 data-nosnippet>64</a>        <span 
class="prelude-val">Ok</span>(positions.len())
+<a href=#65 id=65 data-nosnippet>65</a>    }
+<a href=#66 id=66 data-nosnippet>66</a>
+<a href=#67 id=67 data-nosnippet>67</a>    <span class="attr">#[allow(unused)]
+<a href=#68 id=68 data-nosnippet>68</a>    </span><span class="kw">pub fn 
</span>len(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; 
u64 {
+<a href=#69 id=69 data-nosnippet>69</a>        <span 
class="self">self</span>.inner.len()
+<a href=#70 id=70 data-nosnippet>70</a>    }
+<a href=#71 id=71 data-nosnippet>71</a>}
+<a href=#72 id=72 data-nosnippet>72</a>
+<a href=#73 id=73 data-nosnippet>73</a><span class="comment">// Ideally, we'd 
just wrap `roaring::RoaringTreemap`'s iterator, `roaring::treemap::Iter` here.
+<a href=#74 id=74 data-nosnippet>74</a>// But right now, it does not have a 
corresponding implementation of `roaring::bitmap::Iter::advance_to`,
+<a href=#75 id=75 data-nosnippet>75</a>// which is very handy in 
ArrowReader::build_deletes_row_selection.
+<a href=#76 id=76 data-nosnippet>76</a>// There is a PR open on roaring to add 
this (https://github.com/RoaringBitmap/roaring-rs/pull/314)
+<a href=#77 id=77 data-nosnippet>77</a>// and if that gets merged then we can 
simplify `DeleteVectorIterator` here, refactoring `advance_to`
+<a href=#78 id=78 data-nosnippet>78</a>// to just a wrapper around the 
underlying iterator's method.
+<a href=#79 id=79 data-nosnippet>79</a></span><span class="kw">pub struct 
</span>DeleteVectorIterator&lt;<span class="lifetime">'a</span>&gt; {
+<a href=#80 id=80 data-nosnippet>80</a>    <span class="comment">// NB: 
`BitMapIter` was only exposed publicly in 
https://github.com/RoaringBitmap/roaring-rs/pull/316
+<a href=#81 id=81 data-nosnippet>81</a>    // which is not yet released. As a 
consequence our Cargo.toml temporarily uses a git reference for
+<a href=#82 id=82 data-nosnippet>82</a>    // the roaring dependency.
+<a href=#83 id=83 data-nosnippet>83</a>    </span>outer: BitmapIter&lt;<span 
class="lifetime">'a</span>&gt;,
+<a href=#84 id=84 data-nosnippet>84</a>    inner: <span 
class="prelude-ty">Option</span>&lt;DeleteVectorIteratorInner&lt;<span 
class="lifetime">'a</span>&gt;&gt;,
+<a href=#85 id=85 data-nosnippet>85</a>}
+<a href=#86 id=86 data-nosnippet>86</a>
+<a href=#87 id=87 data-nosnippet>87</a><span class="kw">struct 
</span>DeleteVectorIteratorInner&lt;<span class="lifetime">'a</span>&gt; {
+<a href=#88 id=88 data-nosnippet>88</a>    high_bits: u32,
+<a href=#89 id=89 data-nosnippet>89</a>    bitmap_iter: Iter&lt;<span 
class="lifetime">'a</span>&gt;,
+<a href=#90 id=90 data-nosnippet>90</a>}
+<a href=#91 id=91 data-nosnippet>91</a>
+<a href=#92 id=92 data-nosnippet>92</a><span class="kw">impl </span>Iterator 
<span class="kw">for </span>DeleteVectorIterator&lt;<span 
class="lifetime">'_</span>&gt; {
+<a href=#93 id=93 data-nosnippet>93</a>    <span class="kw">type </span>Item = 
u64;
+<a href=#94 id=94 data-nosnippet>94</a>
+<a href=#95 id=95 data-nosnippet>95</a>    <span class="kw">fn 
</span>next(<span class="kw-2">&amp;mut </span><span class="self">self</span>) 
-&gt; <span class="prelude-ty">Option</span>&lt;<span 
class="self">Self</span>::Item&gt; {
+<a href=#96 id=96 data-nosnippet>96</a>        <span class="kw">if let 
</span><span class="prelude-val">Some</span>(inner) = <span 
class="kw-2">&amp;mut </span><span class="self">self</span>.inner {
+<a href=#97 id=97 data-nosnippet>97</a>            <span class="kw">if let 
</span><span class="prelude-val">Some</span>(inner_next) = 
inner.bitmap_iter.next() {
+<a href=#98 id=98 data-nosnippet>98</a>                <span class="kw">return 
</span><span class="prelude-val">Some</span>(u64::from(inner.high_bits) 
&lt;&lt; <span class="number">32 </span>| u64::from(inner_next));
+<a href=#99 id=99 data-nosnippet>99</a>            }
+<a href=#100 id=100 data-nosnippet>100</a>        }
+<a href=#101 id=101 data-nosnippet>101</a>
+<a href=#102 id=102 data-nosnippet>102</a>        <span class="kw">if let 
</span><span class="prelude-val">Some</span>((high_bits, next_bitmap)) = <span 
class="self">self</span>.outer.next() {
+<a href=#103 id=103 data-nosnippet>103</a>            <span 
class="self">self</span>.inner = <span 
class="prelude-val">Some</span>(DeleteVectorIteratorInner {
+<a href=#104 id=104 data-nosnippet>104</a>                high_bits,
+<a href=#105 id=105 data-nosnippet>105</a>                bitmap_iter: 
next_bitmap.iter(),
+<a href=#106 id=106 data-nosnippet>106</a>            })
+<a href=#107 id=107 data-nosnippet>107</a>        } <span class="kw">else 
</span>{
+<a href=#108 id=108 data-nosnippet>108</a>            <span class="kw">return 
</span><span class="prelude-val">None</span>;
+<a href=#109 id=109 data-nosnippet>109</a>        }
+<a href=#110 id=110 data-nosnippet>110</a>
+<a href=#111 id=111 data-nosnippet>111</a>        <span 
class="self">self</span>.next()
+<a href=#112 id=112 data-nosnippet>112</a>    }
+<a href=#113 id=113 data-nosnippet>113</a>}
+<a href=#114 id=114 data-nosnippet>114</a>
+<a href=#115 id=115 data-nosnippet>115</a><span class="kw">impl 
</span>DeleteVectorIterator&lt;<span class="lifetime">'_</span>&gt; {
+<a href=#116 id=116 data-nosnippet>116</a>    <span class="kw">pub fn 
</span>advance_to(<span class="kw-2">&amp;mut </span><span 
class="self">self</span>, pos: u64) {
+<a href=#117 id=117 data-nosnippet>117</a>        <span class="kw">let 
</span>hi = (pos &gt;&gt; <span class="number">32</span>) <span class="kw">as 
</span>u32;
+<a href=#118 id=118 data-nosnippet>118</a>        <span class="kw">let 
</span>lo = pos <span class="kw">as </span>u32;
+<a href=#119 id=119 data-nosnippet>119</a>
+<a href=#120 id=120 data-nosnippet>120</a>        <span class="kw">let 
</span><span class="prelude-val">Some</span>(<span class="kw-2">ref mut 
</span>inner) = <span class="self">self</span>.inner <span class="kw">else 
</span>{
+<a href=#121 id=121 data-nosnippet>121</a>            <span 
class="kw">return</span>;
+<a href=#122 id=122 data-nosnippet>122</a>        };
+<a href=#123 id=123 data-nosnippet>123</a>
+<a href=#124 id=124 data-nosnippet>124</a>        <span class="kw">while 
</span>inner.high_bits &lt; hi {
+<a href=#125 id=125 data-nosnippet>125</a>            <span class="kw">let 
</span><span class="prelude-val">Some</span>((next_hi, next_bitmap)) = <span 
class="self">self</span>.outer.next() <span class="kw">else </span>{
+<a href=#126 id=126 data-nosnippet>126</a>                <span 
class="kw">return</span>;
+<a href=#127 id=127 data-nosnippet>127</a>            };
+<a href=#128 id=128 data-nosnippet>128</a>
+<a href=#129 id=129 data-nosnippet>129</a>            <span 
class="kw-2">*</span>inner = DeleteVectorIteratorInner {
+<a href=#130 id=130 data-nosnippet>130</a>                high_bits: next_hi,
+<a href=#131 id=131 data-nosnippet>131</a>                bitmap_iter: 
next_bitmap.iter(),
+<a href=#132 id=132 data-nosnippet>132</a>            }
+<a href=#133 id=133 data-nosnippet>133</a>        }
+<a href=#134 id=134 data-nosnippet>134</a>
+<a href=#135 id=135 data-nosnippet>135</a>        
inner.bitmap_iter.advance_to(lo);
+<a href=#136 id=136 data-nosnippet>136</a>    }
+<a href=#137 id=137 data-nosnippet>137</a>}
+<a href=#138 id=138 data-nosnippet>138</a>
+<a href=#139 id=139 data-nosnippet>139</a><span class="kw">impl 
</span>BitOrAssign <span class="kw">for </span>DeleteVector {
+<a href=#140 id=140 data-nosnippet>140</a>    <span class="kw">fn 
</span>bitor_assign(<span class="kw-2">&amp;mut </span><span 
class="self">self</span>, other: <span class="self">Self</span>) {
+<a href=#141 id=141 data-nosnippet>141</a>        <span 
class="self">self</span>.inner.bitor_assign(<span 
class="kw-2">&amp;</span>other.inner);
+<a href=#142 id=142 data-nosnippet>142</a>    }
+<a href=#143 id=143 data-nosnippet>143</a>}
+<a href=#144 id=144 data-nosnippet>144</a>
+<a href=#145 id=145 data-nosnippet>145</a><span class="attr">#[cfg(test)]
+<a href=#146 id=146 data-nosnippet>146</a></span><span class="kw">mod 
</span>tests {
+<a href=#147 id=147 data-nosnippet>147</a>    <span class="kw">use 
super</span>::<span class="kw-2">*</span>;
+<a href=#148 id=148 data-nosnippet>148</a>
+<a href=#149 id=149 data-nosnippet>149</a>    <span class="attr">#[test]
+<a href=#150 id=150 data-nosnippet>150</a>    </span><span class="kw">fn 
</span>test_insertion_and_iteration() {
+<a href=#151 id=151 data-nosnippet>151</a>        <span class="kw">let 
</span><span class="kw-2">mut </span>dv = DeleteVector::default();
+<a href=#152 id=152 data-nosnippet>152</a>        <span 
class="macro">assert!</span>(dv.insert(<span class="number">42</span>));
+<a href=#153 id=153 data-nosnippet>153</a>        <span 
class="macro">assert!</span>(dv.insert(<span class="number">100</span>));
+<a href=#154 id=154 data-nosnippet>154</a>        <span 
class="macro">assert!</span>(!dv.insert(<span class="number">42</span>));
+<a href=#155 id=155 data-nosnippet>155</a>
+<a href=#156 id=156 data-nosnippet>156</a>        <span class="kw">let 
</span><span class="kw-2">mut </span>items: Vec&lt;u64&gt; = 
dv.iter().collect();
+<a href=#157 id=157 data-nosnippet>157</a>        items.sort();
+<a href=#158 id=158 data-nosnippet>158</a>        <span 
class="macro">assert_eq!</span>(items, <span class="macro">vec!</span>[<span 
class="number">42</span>, <span class="number">100</span>]);
+<a href=#159 id=159 data-nosnippet>159</a>        <span 
class="macro">assert_eq!</span>(dv.len(), <span class="number">2</span>);
+<a href=#160 id=160 data-nosnippet>160</a>    }
+<a href=#161 id=161 data-nosnippet>161</a>
+<a href=#162 id=162 data-nosnippet>162</a>    <span class="attr">#[test]
+<a href=#163 id=163 data-nosnippet>163</a>    </span><span class="kw">fn 
</span>test_successful_insert_positions() {
+<a href=#164 id=164 data-nosnippet>164</a>        <span class="kw">let 
</span><span class="kw-2">mut </span>dv = DeleteVector::default();
+<a href=#165 id=165 data-nosnippet>165</a>        <span class="kw">let 
</span>positions = <span class="macro">vec!</span>[<span 
class="number">1</span>, <span class="number">2</span>, <span 
class="number">3</span>, <span class="number">1000</span>, <span 
class="number">1 </span>&lt;&lt; <span class="number">33</span>];
+<a href=#166 id=166 data-nosnippet>166</a>        <span 
class="macro">assert_eq!</span>(dv.insert_positions(<span 
class="kw-2">&amp;</span>positions).unwrap(), <span class="number">5</span>);
+<a href=#167 id=167 data-nosnippet>167</a>
+<a href=#168 id=168 data-nosnippet>168</a>        <span class="kw">let 
</span><span class="kw-2">mut </span>collected: Vec&lt;u64&gt; = 
dv.iter().collect();
+<a href=#169 id=169 data-nosnippet>169</a>        collected.sort();
+<a href=#170 id=170 data-nosnippet>170</a>        <span 
class="macro">assert_eq!</span>(collected, positions);
+<a href=#171 id=171 data-nosnippet>171</a>    }
+<a href=#172 id=172 data-nosnippet>172</a>
+<a href=#173 id=173 data-nosnippet>173</a>    <span class="doccomment">/// 
Testing scenario: bulk insertion fails because input positions are not strictly 
increasing.
+<a href=#174 id=174 data-nosnippet>174</a>    </span><span class="attr">#[test]
+<a href=#175 id=175 data-nosnippet>175</a>    </span><span class="kw">fn 
</span>test_failed_insertion_unsorted_elements() {
+<a href=#176 id=176 data-nosnippet>176</a>        <span class="kw">let 
</span><span class="kw-2">mut </span>dv = DeleteVector::default();
+<a href=#177 id=177 data-nosnippet>177</a>        <span class="kw">let 
</span>positions = <span class="macro">vec!</span>[<span 
class="number">1</span>, <span class="number">3</span>, <span 
class="number">5</span>, <span class="number">4</span>];
+<a href=#178 id=178 data-nosnippet>178</a>        <span class="kw">let 
</span>res = dv.insert_positions(<span class="kw-2">&amp;</span>positions);
+<a href=#179 id=179 data-nosnippet>179</a>        <span 
class="macro">assert!</span>(res.is_err());
+<a href=#180 id=180 data-nosnippet>180</a>    }
+<a href=#181 id=181 data-nosnippet>181</a>
+<a href=#182 id=182 data-nosnippet>182</a>    <span class="doccomment">/// 
Testing scenario: bulk insertion fails because input positions have 
intersection with existing ones.
+<a href=#183 id=183 data-nosnippet>183</a>    </span><span class="attr">#[test]
+<a href=#184 id=184 data-nosnippet>184</a>    </span><span class="kw">fn 
</span>test_failed_insertion_with_intersection() {
+<a href=#185 id=185 data-nosnippet>185</a>        <span class="kw">let 
</span><span class="kw-2">mut </span>dv = DeleteVector::default();
+<a href=#186 id=186 data-nosnippet>186</a>        <span class="kw">let 
</span>positions = <span class="macro">vec!</span>[<span 
class="number">1</span>, <span class="number">3</span>, <span 
class="number">5</span>];
+<a href=#187 id=187 data-nosnippet>187</a>        <span 
class="macro">assert_eq!</span>(dv.insert_positions(<span 
class="kw-2">&amp;</span>positions).unwrap(), <span class="number">3</span>);
+<a href=#188 id=188 data-nosnippet>188</a>
+<a href=#189 id=189 data-nosnippet>189</a>        <span class="kw">let 
</span>res = dv.insert_positions(<span class="kw-2">&amp;</span>[<span 
class="number">2</span>, <span class="number">4</span>]);
+<a href=#190 id=190 data-nosnippet>190</a>        <span 
class="macro">assert!</span>(res.is_err());
+<a href=#191 id=191 data-nosnippet>191</a>    }
+<a href=#192 id=192 data-nosnippet>192</a>
+<a href=#193 id=193 data-nosnippet>193</a>    <span class="doccomment">/// 
Testing scenario: bulk insertion fails because input positions have duplicates.
+<a href=#194 id=194 data-nosnippet>194</a>    </span><span class="attr">#[test]
+<a href=#195 id=195 data-nosnippet>195</a>    </span><span class="kw">fn 
</span>test_failed_insertion_duplicate_elements() {
+<a href=#196 id=196 data-nosnippet>196</a>        <span class="kw">let 
</span><span class="kw-2">mut </span>dv = DeleteVector::default();
+<a href=#197 id=197 data-nosnippet>197</a>        <span class="kw">let 
</span>positions = <span class="macro">vec!</span>[<span 
class="number">1</span>, <span class="number">3</span>, <span 
class="number">5</span>, <span class="number">5</span>];
+<a href=#198 id=198 data-nosnippet>198</a>        <span class="kw">let 
</span>res = dv.insert_positions(<span class="kw-2">&amp;</span>positions);
+<a href=#199 id=199 data-nosnippet>199</a>        <span 
class="macro">assert!</span>(res.is_err());
+<a href=#200 id=200 data-nosnippet>200</a>    }
+<a href=#201 id=201 
data-nosnippet>201</a>}</code></pre></div></section></main></body></html>
\ No newline at end of file


Reply via email to