diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt
index d8b2b03705c7bcc54b6e621d9224a8df72501df8..52888f2a4ad70bcebd8ea374f73cef34dab68a8b 100644
--- a/test/unit/CMakeLists.txt
+++ b/test/unit/CMakeLists.txt
@@ -130,7 +130,7 @@ add_executable(say.test say.c)
 target_link_libraries(say.test core unit)
 
 include_directories(${PROJECT_SOURCE_DIR}/src/box)
-add_executable(vy_mem.test vy_mem.c)
+add_executable(vy_mem.test vy_mem.c vy_iterators_helper.c)
 target_link_libraries(vy_mem.test box unit)
 
 add_executable(column_mask.test column_mask.c)
diff --git a/test/unit/vy_iterators_helper.c b/test/unit/vy_iterators_helper.c
index ef1e6d8e83bd60402985110fd2d14ceae1c0d487..c36c8fb7e9bce250925ae5fa0785f9d946c44db3 100644
--- a/test/unit/vy_iterators_helper.c
+++ b/test/unit/vy_iterators_helper.c
@@ -80,7 +80,7 @@ vy_new_simple_stmt(struct tuple_format *format,
 	return ret;
 }
 
-void
+const struct tuple *
 vy_mem_insert_template(struct vy_mem *mem, const struct vy_stmt_template *templ)
 {
 	struct tuple *stmt;
@@ -99,6 +99,7 @@ vy_mem_insert_template(struct vy_mem *mem, const struct vy_stmt_template *templ)
 		vy_mem_insert_upsert(mem, region_stmt);
 	else
 		vy_mem_insert(mem, region_stmt);
+	return region_stmt;
 }
 
 void
diff --git a/test/unit/vy_iterators_helper.h b/test/unit/vy_iterators_helper.h
index bba909327cacceefd81f6b2b84959a89827aa8ab..a45ba7bcc7c6866cfcb8825ffc9e7bd2a64426c8 100644
--- a/test/unit/vy_iterators_helper.h
+++ b/test/unit/vy_iterators_helper.h
@@ -87,8 +87,10 @@ vy_new_simple_stmt(struct tuple_format *format,
  *
  * @param vy_mem Mem to insert into.
  * @param templ Statement template to insert.
+ *
+ * @retval Lsregion allocated statement.
  */
-void
+const struct tuple *
 vy_mem_insert_template(struct vy_mem *mem,
 		       const struct vy_stmt_template *templ);
 
diff --git a/test/unit/vy_mem.c b/test/unit/vy_mem.c
index bd27bb9569d53582967f2a696abdd0dfbcc9730a..03f0443ac08eb1ec6730e41cb2b06ac04e29d61c 100644
--- a/test/unit/vy_mem.c
+++ b/test/unit/vy_mem.c
@@ -1,78 +1,36 @@
-#include "box/tuple.h"
-
-#include "unit.h"
-
 #include "memory.h"
 #include "fiber.h"
-#include "vy_stmt.h"
-#include "vy_mem.h"
 #include <small/slab_cache.h>
-#include <small/lsregion.h>
-
-static struct tuple *
-vy_mem_insert_helper(struct vy_mem *mem, int key, int64_t lsn)
-{
-	char data[16];
-	char *end = data;
-	end = mp_encode_array(end, 1);
-	end = mp_encode_uint(end, key);
-	assert(end <= data + sizeof(data));
-	struct tuple *stmt = vy_stmt_new_replace(mem->format, data, end);
-	assert(stmt != NULL);
-	vy_stmt_set_lsn(stmt, lsn);
-	struct tuple *region_stmt = vy_stmt_dup_lsregion(stmt, mem->allocator,
-							 mem->generation);
-	assert(region_stmt != NULL);
-	tuple_unref(stmt);
-	vy_mem_insert(mem, region_stmt);
-	return region_stmt;
-}
+#include "vy_iterators_helper.h"
 
 void
 test_basic(void)
 {
 	header();
 
-	plan(13);
+	plan(12);
 
 	/* Create key_def */
 	uint32_t fields[] = { 0 };
 	uint32_t types[] = { FIELD_TYPE_UNSIGNED };
 	struct key_def *key_def = box_key_def_new(fields, types, 1);
 	assert(key_def != NULL);
-
-	/* Create format */
-	struct tuple_format *format = tuple_format_new(&vy_tuple_format_vtab,
-							&key_def, 1, 0);
-	assert(format != NULL);
-
-	/* Create format with column mask */
-	struct tuple_format *format_with_colmask =
-		vy_tuple_format_new_with_colmask(format);
-	assert(format_with_colmask != NULL);
-
-	/* Create upsert format */
-	struct tuple_format *format_upsert =
-		vy_tuple_format_new_upsert(format);
-	assert(format_upsert != NULL);
-
 	/* Create lsregion */
 	struct lsregion lsregion;
 	struct slab_cache *slab_cache = cord_slab_cache();
 	lsregion_create(&lsregion, slab_cache->arena);
+	struct vy_mem *mem = create_test_mem(&lsregion, key_def);
 
-	/* Create mem */
-	int64_t generation = 1;
-	struct vy_mem *mem = vy_mem_new(&lsregion, generation, key_def,
-					format, format_with_colmask,
-					format_upsert, 0);
-	ok(mem != NULL, "vy_mem_new");
 	is(mem->min_lsn, INT64_MAX, "mem->min_lsn on empty mem");
 	is(mem->max_lsn, -1, "mem->max_lsn on empty mem");
+	const struct vy_stmt_template stmts[] = {
+		STMT_TEMPLATE(100, REPLACE, 1), STMT_TEMPLATE(101, REPLACE, 1),
+		STMT_TEMPLATE(102, REPLACE, 1), STMT_TEMPLATE(103, REPLACE, 1),
+		STMT_TEMPLATE(104, REPLACE, 1)
+	};
 
 	/* Check min/max lsn */
-	struct tuple *stmt;
-	stmt = vy_mem_insert_helper(mem, 1, 100);
+	const struct tuple *stmt = vy_mem_insert_template(mem, &stmts[0]);
 	is(mem->min_lsn, INT64_MAX, "mem->min_lsn after prepare");
 	is(mem->max_lsn, -1, "mem->max_lsn after prepare");
 	vy_mem_commit_stmt(mem, stmt);
@@ -80,22 +38,22 @@ test_basic(void)
 	is(mem->max_lsn, 100, "mem->max_lsn after commit");
 
 	/* Check vy_mem_older_lsn */
-	struct tuple *older = stmt;
-	stmt = vy_mem_insert_helper(mem, 1, 101);
+	const struct tuple *older = stmt;
+	stmt = vy_mem_insert_template(mem, &stmts[1]);
 	is(vy_mem_older_lsn(mem, stmt), older, "vy_mem_older_lsn 1");
 	is(vy_mem_older_lsn(mem, older), NULL, "vy_mem_older_lsn 2");
 	vy_mem_commit_stmt(mem, stmt);
 
 	/* Check rollback  */
-	struct tuple *olderolder = stmt;
-	older = vy_mem_insert_helper(mem, 1, 102);
-	stmt = vy_mem_insert_helper(mem, 1, 103);
+	const struct tuple *olderolder = stmt;
+	older = vy_mem_insert_template(mem, &stmts[2]);
+	stmt = vy_mem_insert_template(mem, &stmts[3]);
 	is(vy_mem_older_lsn(mem, stmt), older, "vy_mem_rollback 1");
 	vy_mem_rollback_stmt(mem, older);
 	is(vy_mem_older_lsn(mem, stmt), olderolder, "vy_mem_rollback 2");
 
 	/* Check version  */
-	stmt = vy_mem_insert_helper(mem, 1, 104);
+	stmt = vy_mem_insert_template(mem, &stmts[4]);
 	is(mem->version, 6, "vy_mem->version")
 	vy_mem_commit_stmt(mem, stmt);
 	is(mem->version, 6, "vy_mem->version")
diff --git a/test/unit/vy_mem.result b/test/unit/vy_mem.result
index d4c1596e48f7aeffd5533730f61f899f18f5340a..1a885962f9e6ffd75629082fe2687a09872941d4 100644
--- a/test/unit/vy_mem.result
+++ b/test/unit/vy_mem.result
@@ -1,16 +1,15 @@
 	*** test_basic ***
-1..13
-ok 1 - vy_mem_new
-ok 2 - mem->min_lsn on empty mem
-ok 3 - mem->max_lsn on empty mem
-ok 4 - mem->min_lsn after prepare
-ok 5 - mem->max_lsn after prepare
-ok 6 - mem->min_lsn after commit
-ok 7 - mem->max_lsn after commit
-ok 8 - vy_mem_older_lsn 1
-ok 9 - vy_mem_older_lsn 2
-ok 10 - vy_mem_rollback 1
-ok 11 - vy_mem_rollback 2
+1..12
+ok 1 - mem->min_lsn on empty mem
+ok 2 - mem->max_lsn on empty mem
+ok 3 - mem->min_lsn after prepare
+ok 4 - mem->max_lsn after prepare
+ok 5 - mem->min_lsn after commit
+ok 6 - mem->max_lsn after commit
+ok 7 - vy_mem_older_lsn 1
+ok 8 - vy_mem_older_lsn 2
+ok 9 - vy_mem_rollback 1
+ok 10 - vy_mem_rollback 2
+ok 11 - vy_mem->version
 ok 12 - vy_mem->version
-ok 13 - vy_mem->version
 	*** test_basic: done ***