diff --git a/test/1.0/Convolution2D.cpp b/test/1.0/Convolution2D.cpp
index 9a5d239..c833d89 100644
--- a/test/1.0/Convolution2D.cpp
+++ b/test/1.0/Convolution2D.cpp
@@ -7,12 +7,11 @@
 #include "../Convolution2D.hpp"
 #include "../../1.0/HalPolicy.hpp"
 
-#include <boost/test/unit_test.hpp>
+#include <doctest/doctest.h>
 #include <log/log.h>
 
 #include <OperationsUtils.h>
 
-BOOST_AUTO_TEST_SUITE(Convolution2DTests)
 
 using namespace android::hardware;
 using namespace driverTestHelpers;
@@ -29,14 +28,18 @@
 
 } // namespace driverTestHelpers
 
-BOOST_AUTO_TEST_CASE(ConvValidPadding_Hal_1_0)
+TEST_SUITE("Convolution2DTests_1.0")
+{
+
+
+TEST_CASE("ConvValidPadding_Hal_1_0")
 {
     PaddingTestImpl<hal_1_0::HalPolicy>(android::nn::kPaddingValid);
 }
 
-BOOST_AUTO_TEST_CASE(ConvSamePadding_Hal_1_0)
+TEST_CASE("ConvSamePadding_Hal_1_0")
 {
     PaddingTestImpl<hal_1_0::HalPolicy>(android::nn::kPaddingSame);
 }
 
-BOOST_AUTO_TEST_SUITE_END()
+}
diff --git a/test/1.0/FullyConnectedReshape.cpp b/test/1.0/FullyConnectedReshape.cpp
index 72c90ca..4585c95 100644
--- a/test/1.0/FullyConnectedReshape.cpp
+++ b/test/1.0/FullyConnectedReshape.cpp
@@ -6,37 +6,31 @@
 #include "../DriverTestHelpers.hpp"
 #include "../../1.0/FullyConnected.hpp"
 
-#include <boost/test/unit_test.hpp>
+#include <doctest/doctest.h>
 
-BOOST_AUTO_TEST_SUITE(FullyConnectedReshapeTests)
-
-BOOST_AUTO_TEST_CASE(TestFlattenFullyConnectedInput)
+TEST_SUITE("FullyConnectedReshapeTests")
+{
+TEST_CASE("TestFlattenFullyConnectedInput")
 {
     using armnn::TensorShape;
 
     // Pass through 2d input
-    BOOST_TEST(FlattenFullyConnectedInput(TensorShape({2,2048}), TensorShape({512, 2048})) ==
-               TensorShape({2, 2048}));
+    CHECK(FlattenFullyConnectedInput(TensorShape({2,2048}), TensorShape({512, 2048})) == TensorShape({2, 2048}));
 
     // Trivial flattening of batched channels
-    BOOST_TEST(FlattenFullyConnectedInput(TensorShape({97,1,1,2048}), TensorShape({512, 2048})) ==
-               TensorShape({97, 2048}));
+    CHECK(FlattenFullyConnectedInput(TensorShape({97,1,1,2048}), TensorShape({512, 2048})) == TensorShape({97, 2048}));
 
     // Flatten single batch of rows
-    BOOST_TEST(FlattenFullyConnectedInput(TensorShape({1,97,1,2048}), TensorShape({512, 2048})) ==
-               TensorShape({97, 2048}));
+    CHECK(FlattenFullyConnectedInput(TensorShape({1,97,1,2048}), TensorShape({512, 2048})) == TensorShape({97, 2048}));
 
     // Flatten single batch of columns
-    BOOST_TEST(FlattenFullyConnectedInput(TensorShape({1,1,97,2048}), TensorShape({512, 2048})) ==
-               TensorShape({97, 2048}));
+    CHECK(FlattenFullyConnectedInput(TensorShape({1,1,97,2048}), TensorShape({512, 2048})) == TensorShape({97, 2048}));
 
     // Move batches into input dimension
-    BOOST_TEST(FlattenFullyConnectedInput(TensorShape({50,1,1,10}), TensorShape({512, 20})) ==
-               TensorShape({25, 20}));
+    CHECK(FlattenFullyConnectedInput(TensorShape({50,1,1,10}), TensorShape({512, 20})) == TensorShape({25, 20}));
 
     // Flatten single batch of 3D data (e.g. convolution output)
-    BOOST_TEST(FlattenFullyConnectedInput(TensorShape({1,16,16,10}), TensorShape({512, 2560})) ==
-               TensorShape({1, 2560}));
+    CHECK(FlattenFullyConnectedInput(TensorShape({1,16,16,10}), TensorShape({512, 2560})) == TensorShape({1, 2560}));
 }
 
-BOOST_AUTO_TEST_SUITE_END()
+}
diff --git a/test/1.0/Lstm.cpp b/test/1.0/Lstm.cpp
index 5f0a209..0833fd6 100644
--- a/test/1.0/Lstm.cpp
+++ b/test/1.0/Lstm.cpp
@@ -5,30 +5,46 @@
 
 #include "../Lstm.hpp"
 
-#include <boost/test/data/test_case.hpp>
-
-BOOST_AUTO_TEST_SUITE(LstmTests)
-
 using namespace armnn_driver;
 
-BOOST_DATA_TEST_CASE(LstmNoCifgNoPeepholeNoProjectionTest, COMPUTE_DEVICES)
+TEST_SUITE("LstmTests_1.0_CpuRef")
 {
-    LstmNoCifgNoPeepholeNoProjection<hal_1_0::HalPolicy>(sample);
+    TEST_CASE("LstmNoCifgNoPeepholeNoProjectionTest_1.0_armnn::Compute::CpuRef")
+    {
+        LstmNoCifgNoPeepholeNoProjection<hal_1_0::HalPolicy>(armnn::Compute::CpuRef);
+    }
+    TEST_CASE("LstmCifgPeepholeNoProjectionTest_1.0_CpuRef")
+    {
+        LstmCifgPeepholeNoProjection<hal_1_0::HalPolicy>(armnn::Compute::CpuRef);
+    }
+    TEST_CASE("LstmNoCifgPeepholeProjectionTest_1.0_CpuRef")
+    {
+        LstmNoCifgPeepholeProjection<hal_1_0::HalPolicy>(armnn::Compute::CpuRef);
+    }
+    TEST_CASE("LstmCifgPeepholeNoProjectionBatch2Test_1.0_CpuRef")
+    {
+        LstmCifgPeepholeNoProjectionBatch2<hal_1_0::HalPolicy>(armnn::Compute::CpuRef);
+    }
 }
 
-BOOST_DATA_TEST_CASE(LstmCifgPeepholeNoProjectionTest, COMPUTE_DEVICES)
+#if defined(ARMCOMPUTECL_ENABLED)
+TEST_SUITE("LstmTests_1.0_GpuAcc")
 {
-    LstmCifgPeepholeNoProjection<hal_1_0::HalPolicy>(sample);
+    TEST_CASE("LstmNoCifgNoPeepholeNoProjectionTest_1.0_GpuAcc")
+    {
+        LstmNoCifgNoPeepholeNoProjection<hal_1_0::HalPolicy>(armnn::Compute::GpuAcc);
+    }
+    TEST_CASE("LstmCifgPeepholeNoProjectionTest_1.0_GpuAcc")
+    {
+        LstmCifgPeepholeNoProjection<hal_1_0::HalPolicy>(armnn::Compute::GpuAcc);
+    }
+    TEST_CASE("LstmNoCifgPeepholeProjectionTest_1.0_GpuAcc")
+    {
+        LstmNoCifgPeepholeProjection<hal_1_0::HalPolicy>(armnn::Compute::GpuAcc);
+    }
+    TEST_CASE("LstmCifgPeepholeNoProjectionBatch2Test_1.0_GpuAcc")
+    {
+        LstmCifgPeepholeNoProjectionBatch2<hal_1_0::HalPolicy>(armnn::Compute::GpuAcc);
+    }
 }
-
-BOOST_DATA_TEST_CASE(LstmNoCifgPeepholeProjectionTest, COMPUTE_DEVICES)
-{
-    LstmNoCifgPeepholeProjection<hal_1_0::HalPolicy>(sample);
-}
-
-BOOST_DATA_TEST_CASE(LstmCifgPeepholeNoProjectionBatch2Test, COMPUTE_DEVICES)
-{
-    LstmCifgPeepholeNoProjectionBatch2<hal_1_0::HalPolicy>(sample);
-}
-
-BOOST_AUTO_TEST_SUITE_END()
+#endif
\ No newline at end of file
