fix(library/vm/vm_string): bug at string.iterator.insert VM builtin implementation

This commit is contained in:
Leonardo de Moura 2017-10-20 14:52:13 -07:00
parent e30f2f6604
commit f8ce142da7
3 changed files with 26 additions and 1 deletions

View file

@ -291,7 +291,7 @@ vm_obj string_iterator_insert(vm_obj const & it, vm_obj const & s) {
return it;
} else {
std::string new_s = s_0.m_value;
new_s.insert(1, s_1.m_value);
new_s.insert(i, s_1.m_value);
return mk_vm_pair(to_obj(new_s, s_0.m_length + s_1.m_length), mk_vm_nat(i));
}
}

View file

@ -14,6 +14,11 @@ let it₁ := s.mk_iterator.to_end in
let it₂ := it₁.prev in
it₁.prev_to_string ++ "-" ++ it₂.prev_to_string
def s (s : string) : string :=
let it₁ := s.mk_iterator.to_end in
let it₂ := it₁.prev in
(it₁.insert "abc").to_string ++ (it₂.insert "de").to_string
#eval "hello" ++ "hello"
#eval f "hello"
#eval (f "αβ").length
@ -48,3 +53,13 @@ it₁.prev_to_string ++ "-" ++ it₂.prev_to_string
#eval (("a".push (char.of_nat 0)) ++ "αb").length
#eval r "abc"
#eval "abc".mk_iterator.to_end.prev_to_string
#eval "".mk_iterator.has_next
#eval "a".mk_iterator.has_next
#eval "a".mk_iterator.next.has_next
#eval "".mk_iterator.has_prev
#eval "a".mk_iterator.next.has_prev
#eval "αβ".mk_iterator.next.has_prev
#eval "αβ".mk_iterator.next.prev.has_prev
#eval ("αβ".mk_iterator.to_end.insert "abc").to_string
#eval ("αβ".mk_iterator.next.insert "abc").to_string
#eval s "αβ"

View file

@ -32,3 +32,13 @@
4
"abc-ab"
"abc"
ff
tt
ff
ff
tt
tt
ff
"αβabc"
"αabcβ"
"αβabcαdeβ"