29 lines
838 B
Text
29 lines
838 B
Text
import Lean.Data.PersistentArray
|
|
/-!
|
|
Test `PersistentArray.forM` with nonzero start position.
|
|
-/
|
|
|
|
def mk (n : Nat) : Lean.PersistentArray Nat :=
|
|
List.range n |>.toPArray'
|
|
|
|
def sum1 (start : Nat) (s : List Nat) : Nat :=
|
|
let (_, s) := StateT.run (m := Id) (s.drop start |>.forM fun val => modify (· + val)) 0
|
|
s
|
|
|
|
def sum2 (start : Nat) (s : Lean.PArray Nat) : Nat :=
|
|
let (_, s) := StateT.run (m := Id) (s.forM (start := start) (fun val => modify (· + val))) 0
|
|
s
|
|
|
|
def check (s₁ : List Nat) : IO Unit := do
|
|
let s₂ := s₁.toPArray'
|
|
let n := s₂.size
|
|
for i in *...n do
|
|
unless sum1 i s₁ == sum2 i s₂ do
|
|
throw <| .userError "failed"
|
|
IO.println "ok"
|
|
|
|
#eval check (List.range 10)
|
|
#eval check (List.range 0)
|
|
#eval check (List.range 2000)
|
|
#eval check (List.replicate 1000 1)
|
|
#eval check (List.replicate 10 2)
|