diff --git a/python/pyarmnn/test/test_descriptors.py b/python/pyarmnn/test/test_descriptors.py
index 6d49747d..b0574a1 100644
--- a/python/pyarmnn/test/test_descriptors.py
+++ b/python/pyarmnn/test/test_descriptors.py
@@ -143,6 +143,16 @@
     np.allclose(-6, desc.m_Min)
 
 
+def test_fill_descriptor_default_values():
+    desc = ann.FillDescriptor()
+    np.allclose(0, desc.m_Value)
+
+
+def test_gather_descriptor_default_values():
+    desc = ann.GatherDescriptor()
+    assert desc.m_Axis == 0
+
+
 def test_fully_connected_descriptor_default_values():
     desc = ann.FullyConnectedDescriptor()
     assert desc.m_BiasEnabled == False
@@ -370,7 +380,7 @@
 
 
 def test_transpose_convolution2d_descriptor_default_values():
-    desc = ann.DepthwiseConvolution2dDescriptor()
+    desc = ann.TransposeConvolution2dDescriptor()
     assert desc.m_PadLeft == 0
     assert desc.m_PadTop == 0
     assert desc.m_PadRight == 0
@@ -379,6 +389,7 @@
     assert desc.m_StrideY == 0
     assert desc.m_BiasEnabled == False
     assert desc.m_DataLayout == ann.DataLayout_NCHW
+    assert desc.m_OutputShapeEnabled == False
 
 
 def test_view_descriptor_default_values():
@@ -480,7 +491,9 @@
                                        'StackDescriptor',
                                        'StridedSliceDescriptor',
                                        'TransposeConvolution2dDescriptor',
-                                       'ElementwiseUnaryDescriptor'])
+                                       'ElementwiseUnaryDescriptor',
+                                       'FillDescriptor',
+                                       'GatherDescriptor'])
 class TestDescriptorMassChecks:
 
     def test_desc_implemented(self, desc_name):
@@ -522,7 +535,9 @@
                                        'StackDescriptor',
                                        'StridedSliceDescriptor',
                                        'TransposeConvolution2dDescriptor',
-                                       'ElementwiseUnaryDescriptor'])
+                                       'ElementwiseUnaryDescriptor',
+                                       'FillDescriptor',
+                                       'GatherDescriptor'])
 class TestDescriptorMassChecks:
 
     def test_desc_implemented(self, desc_name):
diff --git a/python/pyarmnn/test/test_network.py b/python/pyarmnn/test/test_network.py
index fc2591c..679e640 100644
--- a/python/pyarmnn/test/test_network.py
+++ b/python/pyarmnn/test/test_network.py
@@ -6,6 +6,23 @@
 import pytest
 import pyarmnn as ann
 
+def test_optimizer_options_default_values():
+    opt = ann.OptimizerOptions()
+    assert opt.m_ReduceFp32ToFp16 == False
+    assert opt.m_Debug == False
+    assert opt.m_ReduceFp32ToBf16 == False
+
+def test_optimizer_options_set_values1():
+    opt = ann.OptimizerOptions(True, True)
+    assert opt.m_ReduceFp32ToFp16 == True
+    assert opt.m_Debug == True
+    assert opt.m_ReduceFp32ToBf16 == False
+
+def test_optimizer_options_set_values2():
+    opt = ann.OptimizerOptions(False, False, True)
+    assert opt.m_ReduceFp32ToFp16 == False
+    assert opt.m_Debug == False
+    assert opt.m_ReduceFp32ToBf16 == True
 
 @pytest.fixture(scope="function")
 def get_runtime(shared_data_folder, network_file):
@@ -166,6 +183,7 @@
     'AddDivisionLayer',
     'AddElementwiseUnaryLayer',
     'AddFloorLayer',
+    'AddFillLayer',
     'AddFullyConnectedLayer',
     'AddGatherLayer',
     'AddInputLayer',
@@ -186,6 +204,7 @@
     'AddPreluLayer',
     'AddQuantizeLayer',
     'AddQuantizedLstmLayer',
+    'AddRankLayer',
     'AddReshapeLayer',
     'AddResizeLayer',
     'AddSliceLayer',
diff --git a/python/pyarmnn/test/test_tflite_parser.py b/python/pyarmnn/test/test_tflite_parser.py
index 344ec7c..8735eef 100644
--- a/python/pyarmnn/test/test_tflite_parser.py
+++ b/python/pyarmnn/test/test_tflite_parser.py
@@ -7,6 +7,12 @@
 import numpy as np
 
 
+def test_TfLiteParserOptions_default_values():
+    parserOptions = ann.TfLiteParserOptions()
+    assert parserOptions.m_InferAndValidate == False
+    assert parserOptions.m_StandInLayerForUnsupported == False
+
+
 @pytest.fixture()
 def parser(shared_data_folder):
     """
@@ -30,6 +36,42 @@
     assert parser.thisown
 
 
+def test_tflite_parser_with_optional_options():
+    parserOptions = ann.TfLiteParserOptions()
+    parserOptions.m_InferAndValidate = True
+    parser = ann.ITfLiteParser(parserOptions)
+    assert parser.thisown
+
+
+def create_with_opt() :
+    parserOptions = ann.TfLiteParserOptions()
+    parserOptions.m_InferAndValidate = True
+    return ann.ITfLiteParser(parserOptions)
+
+def test_tflite_parser_with_optional_options_out_of_scope(shared_data_folder):
+    parser = create_with_opt()
+    network = parser.CreateNetworkFromBinaryFile(os.path.join(shared_data_folder, "mock_model.tflite"))
+
+    graphs_count = parser.GetSubgraphCount()
+    graph_id = graphs_count - 1
+
+    input_names = parser.GetSubgraphInputTensorNames(graph_id)
+    input_binding_info = parser.GetNetworkInputBindingInfo(graph_id, input_names[0])
+
+    output_names = parser.GetSubgraphOutputTensorNames(graph_id)
+
+    preferred_backends = [ann.BackendId('CpuAcc'), ann.BackendId('CpuRef')]
+
+    options = ann.CreationOptions()
+    runtime = ann.IRuntime(options)
+
+    opt_network, messages = ann.Optimize(network, preferred_backends, runtime.GetDeviceSpec(), ann.OptimizerOptions())
+    assert 0 == len(messages)
+
+    net_id, messages = runtime.LoadNetwork(opt_network)
+    assert "" == messages
+
+
 def test_tflite_get_sub_graph_count(parser):
     graphs_count = parser.GetSubgraphCount()
     assert graphs_count == 1
