diff --git a/test/gtest/DnaTest.cpp b/test/gtest/DnaTest.cpp
index ecb205a111244b815099b55ce392be572e70d58f..d3f0d671217da4cba973a0ae3cc6aabff0dcda69 100644
--- a/test/gtest/DnaTest.cpp
+++ b/test/gtest/DnaTest.cpp
@@ -35,9 +35,11 @@
 #include <array>
 #include <memory>
 #include <string>
+#include <sstream>
 
 #include "Dna_7.h"
 #include "macros.h"
+#include "Strand.h"
 
 using namespace aevol;
 
@@ -103,3 +105,72 @@ TEST_F(DnaTest, TestDna) {
   // Check genome size
   EXPECT_EQ(genome1.size(), dna1->length());
 }
+
+
+struct subseq_test_params {
+  Strand strand;
+  size_t first;
+  size_t count;
+  bool spans_oriC = false;
+};
+std::ostream& operator<<(std::ostream& os, const subseq_test_params& o) {
+  os << "strand: " << o.strand << " ; first: " << o.first << " ; count: " << o.count << " ; spans_oriC: "
+     << (o.spans_oriC ? "true" : "false");
+  return os;
+}
+
+TEST_F(DnaTest, Test_subseq) {
+  std::array<subseq_test_params, 4> tests_leading = {{
+      {Strand::LEADING, 0, 10, false},
+      {Strand::LEADING, 10, 42, false},
+      {Strand::LEADING, 100, 42, true},
+      {Strand::LEADING, 100, genome1.size(), true} // Whole genome
+  }};
+
+  for (const auto& test : tests_leading) {
+    auto subseq = dna1->subseq(test.first, test.count, test.strand);
+
+    // Check subseq size
+    EXPECT_EQ(test.count, subseq.size());
+
+    // Check subseq content
+    if (test.spans_oriC) {
+      auto expected_subseq = genome1.substr(test.first);
+      expected_subseq += genome1.substr(0, test.count - expected_subseq.size());
+      EXPECT_EQ(expected_subseq, subseq)
+          << "\tNote: testing (" << test << ')';
+
+    } else {
+      EXPECT_EQ(genome1.substr(test.first, test.count), subseq)
+          << "\tNote: testing (" << test << ')';
+    }
+  }
+
+  std::array<subseq_test_params, 3> tests_lagging = {{
+      {Strand::LAGGING, 15, 12, false},
+      {Strand::LAGGING, genome1.size() - 1, genome1.size(), false}, // Whole genome
+      {Strand::LAGGING, 4, 11, true}
+  }};
+
+  for (const auto& test : tests_lagging) {
+    auto subseq = dna1->subseq(test.first, test.count, test.strand);
+
+    // Construct expected result (naïve mode)
+    std::string expected_subseq(test.count, '0');
+    if (test.spans_oriC) {
+      for (size_t i = 0; i < test.first + 1; ++i) {
+        expected_subseq[i] = genome1[test.first - i] == '0' ? '1' : '0';
+      }
+      for (size_t i = 1; i < test.count - test.first; ++i) {
+        expected_subseq[test.first + i] = genome1[genome1.size() - i] == '0' ? '1' : '0';
+      }
+    } else {
+      for (size_t i = 0 ; i < test.count ; ++i) {
+        expected_subseq[i] = genome1[test.first - i] == '0' ? '1' : '0';
+      }
+    }
+
+    EXPECT_EQ(expected_subseq, subseq)
+        << "\tNote: testing (" << test << ')';
+  }
+}