diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
index 5f5c474ce8663614a434bfc4c9791444041cafe1..9beb8c1dde501860137abe70a6f7646cc0a6fbcb 100644
--- a/.github/workflows/pull_request.yml
+++ b/.github/workflows/pull_request.yml
@@ -127,7 +127,7 @@ jobs:
       - name: Pytest
         env:
           NEBULA_TEST_LOGS_DIR: ${{ github.workspace }}/build
-        run: python3 -m pytest --dist=loadfile -n8 --rm_dir=false -m "not skip" --build_dir="$PWD/../build"
+        run: python3 -m pytest --dist=loadfile -n8 --rm_dir=false -m "not skip"
         timeout-minutes: 25
         working-directory: tests
       - name: Upload logs
diff --git a/ci/test.sh b/ci/test.sh
index 88b9003e4b084869f9ccc7f9820bce3c0b1dd277..ee341929078523c15994e28211ea3bb70212a0ec 100755
--- a/ci/test.sh
+++ b/ci/test.sh
@@ -89,18 +89,6 @@ function run_ctest() {
           --output-on-failure
 }
 
-function run_test() {
-    export PYTHONPATH=$PROJ_DIR:$PYTHONPATH
-    pushd $PROJ_DIR/tests
-    pytest -n 8 --build_dir=$BUILD_DIR \
-        --dist=loadfile \
-        --debug_log=false \
-        ${@:1}
-
-    # $BUILD_DIR/tests/ntr --debug_log=false ${@:1} $PROJ_DIR/tests/job/*
-    popd
-}
-
 function test_in_cluster() {
     cd $BUILD_DIR/tests
     export PYTHONPATH=$PROJ_DIR:$PYTHONPATH
@@ -130,9 +118,6 @@ case "$1" in
     ctest)
         run_ctest
         ;;
-    test)
-        run_test "${@:2}"
-        ;;
     k8s)
         prepare
         configure_clang
diff --git a/tests/Makefile b/tests/Makefile
index 8e8843d42c71e6a11308a60a1e3f70f3844748be..1eadf3b732fca79f27501b0a85a3921a89f8c043 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -36,7 +36,10 @@ check:
 	@find $(CURR_DIR)/tck/features -type f -iname "*.feature" -print | xargs $(gherkin_fmt) --check
 
 test: fmt
-	cd $(CURR_DIR) && pytest -n8 --dist=loadfile -m "not skip" --build_dir=$(CURR_DIR)/../build
+	cd $(CURR_DIR) && pytest -n8 --dist=loadfile -m "not skip"
+
+tck: fmt
+	cd $(CURR_DIR) && pytest -n8 --dist=loadfile -m "not skip" $(CURR_DIR)/tck/
 
 clean:
 	@rm -rf $(CURR_DIR)/nebula-python $(CURR_DIR)/reformat-gherkin $(CURR_DIR)/.pytest $(CURR_DIR)/.pytest_cache
diff --git a/tests/conftest.py b/tests/conftest.py
index cdd17ed61d7d209d38deb8fc5b2c605f1be73e04..18795fddf8717bd0e6049dccdba065ac4728a035 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -56,7 +56,7 @@ def pytest_addoption(parser):
 
     parser.addoption("--build_dir",
                      dest="build_dir",
-                     default="",
+                     default=f"{CURR_PATH}/../build",
                      help="Nebula Graph CMake build directory")
 
 
diff --git a/tests/query/v2/match/test_variable_length_relationships.py b/tests/query/v2/match/test_variable_length_relationships.py
index d25e1f8c9c836092042257acfa6266132e8260e9..85bbee7a72432baab70dcf67b4519676dc5248b6 100644
--- a/tests/query/v2/match/test_variable_length_relationships.py
+++ b/tests/query/v2/match/test_variable_length_relationships.py
@@ -260,343 +260,6 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite):
         }
         self.check_rows_with_header(stmt, expected)
 
-    def test_hops_m_to_n(self,
-                         like,
-                         serve,
-                         serve_2hop,
-                         serve_3hop,
-                         like_2hop,
-                         like_3hop):
-        VERTICES = self.VERTEXS
-
-        def like_row_2hop(dst1: str, dst2: str):
-            return [like_2hop('Tim Duncan', dst1, dst2), VERTICES[dst2]]
-
-        def like_row_3hop(dst1: str, dst2: str, dst3: str):
-            return [like_3hop('Tim Duncan', dst1, dst2, dst3), VERTICES[dst3]]
-
-        def serve_row_2hop(team, player, r1=0, r2=0):
-            return [[serve('Tim Duncan', team, r1), serve(player, team, r2)], VERTICES[player]]
-
-        def serve_row_3hop(team1, player, team2, r1=0, r2=0, r3=0):
-            return [
-                [serve('Tim Duncan', team1, r1), serve(player, team1, r2), serve(player, team2, r3)],
-                VERTICES[team2]
-            ]
-
-        # single both direction edge with properties
-        stmt = '''
-        MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3{start_year: 2000}]-(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        stmt = '''
-        MATCH (:player{name:"Tim Duncan"})-[e:like*2..3{likeness: 90}]-(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [
-                [like_2hop("Tiago Splitter", "Manu Ginobili", "Tim Duncan"), VERTICES["Tiago Splitter"]],
-            ],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        # single direction edge with properties
-        stmt = '''
-        MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3{start_year: 2000}]->(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        stmt = '''
-        MATCH (:player{name:"Tim Duncan"})-[e:like*2..3{likeness: 90}]->(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        stmt = '''
-        MATCH (:player{name:"Tim Duncan"})<-[e:like*2..3{likeness: 90}]-(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [
-                [like_2hop("Tiago Splitter", "Manu Ginobili", "Tim Duncan"), VERTICES["Tiago Splitter"]],
-            ],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        # single both direction edge without properties
-        stmt = '''
-        MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3]-(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [
-                serve_row_2hop("Spurs", "Dejounte Murray"),
-                serve_row_2hop("Spurs", "Marco Belinelli"),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Bulls"),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Hornets"),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Hawks"),
-                serve_row_3hop("Spurs", "Marco Belinelli", "76ers"),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Spurs", 0, 0, 1),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Hornets", 0, 0, 1),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Raptors"),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Warriors"),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Kings"),
-                serve_row_2hop("Spurs", "Danny Green"),
-                serve_row_3hop("Spurs", "Danny Green", "Cavaliers"),
-                serve_row_3hop("Spurs", "Danny Green", "Raptors"),
-                serve_row_2hop("Spurs", "Aron Baynes"),
-                serve_row_3hop("Spurs", "Aron Baynes", "Pistons"),
-                serve_row_3hop("Spurs", "Aron Baynes", "Celtics"),
-                serve_row_2hop("Spurs", "Jonathon Simmons"),
-                serve_row_3hop("Spurs", "Jonathon Simmons", "76ers"),
-                serve_row_3hop("Spurs", "Jonathon Simmons", "Magic"),
-                serve_row_2hop("Spurs", "Rudy Gay"),
-                serve_row_3hop("Spurs", "Rudy Gay", "Raptors"),
-                serve_row_3hop("Spurs", "Rudy Gay", "Kings"),
-                serve_row_3hop("Spurs", "Rudy Gay", "Grizzlies"),
-                serve_row_2hop("Spurs", "Tony Parker"),
-                serve_row_3hop("Spurs", "Tony Parker", "Hornets"),
-                serve_row_2hop("Spurs", "Manu Ginobili"),
-                serve_row_2hop("Spurs", "David West"),
-                serve_row_3hop("Spurs", "David West", "Pacers"),
-                serve_row_3hop("Spurs", "David West", "Warriors"),
-                serve_row_3hop("Spurs", "David West", "Hornets"),
-                serve_row_2hop("Spurs", "Tracy McGrady"),
-                serve_row_3hop("Spurs", "Tracy McGrady", "Raptors"),
-                serve_row_3hop("Spurs", "Tracy McGrady", "Magic"),
-                serve_row_3hop("Spurs", "Tracy McGrady", "Rockets"),
-                serve_row_2hop("Spurs", "Marco Belinelli", 0, 1),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Bulls", 0, 1, 0),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Spurs", 0, 1, 0),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Hornets", 0, 1, 0),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Hawks", 0, 1, 0),
-                serve_row_3hop("Spurs", "Marco Belinelli", "76ers", 0, 1, 0),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Hornets", 0, 1, 1),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Raptors", 0, 1, 0),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Warriors", 0, 1, 0),
-                serve_row_3hop("Spurs", "Marco Belinelli", "Kings", 0, 1, 0),
-                serve_row_2hop("Spurs", "Paul Gasol"),
-                serve_row_3hop("Spurs", "Paul Gasol", "Lakers"),
-                serve_row_3hop("Spurs", "Paul Gasol", "Bulls"),
-                serve_row_3hop("Spurs", "Paul Gasol", "Grizzlies"),
-                serve_row_3hop("Spurs", "Paul Gasol", "Bucks"),
-                serve_row_2hop("Spurs", "LaMarcus Aldridge"),
-                serve_row_3hop("Spurs", "LaMarcus Aldridge", "Trail Blazers"),
-                serve_row_2hop("Spurs", "Tiago Splitter"),
-                serve_row_3hop("Spurs", "Tiago Splitter", "Hawks"),
-                serve_row_3hop("Spurs", "Tiago Splitter", "76ers"),
-                serve_row_2hop("Spurs", "Cory Joseph"),
-                serve_row_3hop("Spurs", "Cory Joseph", "Pacers"),
-                serve_row_3hop("Spurs", "Cory Joseph", "Raptors"),
-                serve_row_2hop("Spurs", "Kyle Anderson"),
-                serve_row_3hop("Spurs", "Kyle Anderson", "Grizzlies"),
-                serve_row_2hop("Spurs", "Boris Diaw"),
-                serve_row_3hop("Spurs", "Boris Diaw", "Suns"),
-                serve_row_3hop("Spurs", "Boris Diaw", "Jazz"),
-                serve_row_3hop("Spurs", "Boris Diaw", "Hawks"),
-                serve_row_3hop("Spurs", "Boris Diaw", "Hornets"),
-            ],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        # stmt = '''
-        # MATCH (:player{name: "Tim Duncan"})-[e:like*2..3]-(v)
-        # RETURN count(*)
-        # '''
-        # expected = {
-        #     "column_names": ['count(*)'],
-        #     "rows": [292],
-        # }
-        # self.check_rows_with_header(stmt, expected)
-
-        # single direction edge without properties
-        stmt = '''
-        MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3]->(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        stmt = '''
-        MATCH (:player{name: "Tim Duncan"})-[e:like*2..3]->(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [
-                like_row_2hop("Tony Parker", "Tim Duncan"),
-                like_row_3hop("Tony Parker", "Tim Duncan", "Manu Ginobili"),
-                like_row_2hop("Tony Parker", "Manu Ginobili"),
-                like_row_3hop("Tony Parker", "Manu Ginobili", "Tim Duncan"),
-                like_row_2hop("Tony Parker", "LaMarcus Aldridge"),
-                like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tony Parker"),
-                like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tim Duncan"),
-                like_row_2hop("Manu Ginobili", "Tim Duncan"),
-                like_row_3hop("Manu Ginobili", "Tim Duncan", "Tony Parker"),
-            ],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        # multiple both direction edge with properties
-        stmt = '''
-        MATCH (:player{name: "Tim Duncan"})-[e:serve|like*2..3{likeness: 90}]-(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [
-                [like_2hop("Tiago Splitter", "Manu Ginobili", "Tim Duncan"), VERTICES["Tiago Splitter"]]
-            ],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        stmt = '''
-        MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3{start_year: 2000}]-(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        # multiple direction edge with properties
-        stmt = '''
-        MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3{likeness: 90}]->(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        stmt = '''
-        MATCH (:player{name:"Tim Duncan"})<-[e:serve|like*2..3{likeness: 90}]-(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [
-                [like_2hop("Tiago Splitter", "Manu Ginobili", "Tim Duncan"), VERTICES['Tiago Splitter']]
-            ],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        # multiple both direction edge without properties
-        # stmt = '''
-        # MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3]-(v)
-        # RETURN count(*)
-        # '''
-        # expected = {
-        #     "column_names": ['COUNT(*)'],
-        #     "rows": [927],
-        # }
-        # self.check_rows_with_header(stmt, expected)
-
-        # multiple direction edge without properties
-        stmt = '''
-        MATCH (:player{name: "Tim Duncan"})-[e:serve|like*2..3]->(v)
-        RETURN e, v
-        '''
-        expected = {
-            "column_names": ['e', 'v'],
-            "rows": [
-                like_row_2hop("Tony Parker", "Tim Duncan"),
-                like_row_3hop("Tony Parker", "Tim Duncan", "Manu Ginobili"),
-                [
-                    [
-                        like("Tim Duncan", "Tony Parker"),
-                        like("Tony Parker", "Tim Duncan"),
-                        serve("Tim Duncan", "Spurs"),
-                    ],
-                    VERTICES['Spurs'],
-                ],
-                like_row_2hop("Tony Parker", "Manu Ginobili"),
-                like_row_3hop("Tony Parker", "Manu Ginobili", "Tim Duncan"),
-                [
-                    [
-                        like("Tim Duncan", "Tony Parker"),
-                        like("Tony Parker", "Manu Ginobili"),
-                        serve("Manu Ginobili", "Spurs"),
-                    ],
-                    VERTICES['Spurs'],
-                ],
-                like_row_2hop("Tony Parker", "LaMarcus Aldridge"),
-                like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tony Parker"),
-                like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tim Duncan"),
-                [
-                    [
-                        like("Tim Duncan", "Tony Parker"),
-                        like("Tony Parker", "LaMarcus Aldridge"),
-                        serve("LaMarcus Aldridge", "Trail Blazers"),
-                    ],
-                    VERTICES['Trail Blazers'],
-                ],
-                [
-                    [
-                        like("Tim Duncan", "Tony Parker"),
-                        like("Tony Parker", "LaMarcus Aldridge"),
-                        serve("LaMarcus Aldridge", "Spurs"),
-                    ],
-                    VERTICES['Spurs'],
-                ],
-                [
-                    [
-                        like("Tim Duncan", "Tony Parker"),
-                        serve("Tony Parker", "Hornets"),
-                    ],
-                    VERTICES['Hornets'],
-                ],
-                [
-                    [
-                        like("Tim Duncan", "Tony Parker"),
-                        serve("Tony Parker", "Spurs"),
-                    ],
-                    VERTICES['Spurs'],
-                ],
-                like_row_2hop("Manu Ginobili", "Tim Duncan"),
-                like_row_3hop("Manu Ginobili", "Tim Duncan", "Tony Parker"),
-                [
-                    [
-                        like("Tim Duncan", "Manu Ginobili"),
-                        like("Manu Ginobili", "Tim Duncan"),
-                        serve("Tim Duncan", "Spurs"),
-                    ],
-                    VERTICES['Spurs'],
-                ],
-                [
-                    [
-                        like("Tim Duncan", "Manu Ginobili"),
-                        serve("Manu Ginobili", "Spurs"),
-                    ],
-                    VERTICES['Spurs'],
-                ],
-            ],
-        }
-        self.check_rows_with_header(stmt, expected)
-
     @pytest.mark.skip
     def test_mix_hops(self):
         stmt = '''
@@ -609,86 +272,17 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite):
         }
         self.check_rows_with_header(stmt, expected)
 
-    def test_return_all(self, like_2hop_start_with, like_3hop_start_with):
-        like_row_2hop = like_2hop_start_with('Tim Duncan')
-        like_row_3hop = like_3hop_start_with('Tim Duncan')
-        stmt = '''
-        MATCH (:player{name:"Tim Duncan"})-[e:like*2..3]->()
-        RETURN *
-        '''
-        expected = {
-            "column_names": ['e'],
-            "rows": [
-                [like_row_2hop("Tony Parker", "Tim Duncan")],
-                [like_row_3hop("Tony Parker", "Tim Duncan", "Manu Ginobili")],
-                [like_row_2hop("Tony Parker", "Manu Ginobili")],
-                [like_row_3hop("Tony Parker", "Manu Ginobili", "Tim Duncan")],
-                [like_row_2hop("Tony Parker", "LaMarcus Aldridge")],
-                [like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tony Parker")],
-                [like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tim Duncan")],
-                [like_row_2hop("Manu Ginobili", "Tim Duncan")],
-                [like_row_3hop("Manu Ginobili", "Tim Duncan", "Tony Parker")],
-            ],
-        }
-        self.check_rows_with_header(stmt, expected)
-
     def test_more_cases(self, like, serve, like_2hop):
         # stmt = '''
         # MATCH (v:player{name: 'Tim Duncan'})-[e:like*0]-()
         # RETURN e
         # '''
 
-        stmt = '''
-        MATCH (v:player{name: 'Tim Duncan'})-[e:like*1]-()
-        RETURN e
-        '''
-        expected = {
-            "column_names": ['e'],
-            "rows": [
-                [[like('Tim Duncan', 'Manu Ginobili')]],
-                [[like('Tim Duncan', 'Tony Parker')]],
-                [[like('Dejounte Murray', 'Tim Duncan')]],
-                [[like('Shaquile O\'Neal', 'Tim Duncan')]],
-                [[like('Marco Belinelli', 'Tim Duncan')]],
-                [[like('Boris Diaw', 'Tim Duncan')]],
-                [[like('Manu Ginobili', 'Tim Duncan')]],
-                [[like('Danny Green', 'Tim Duncan')]],
-                [[like('Tiago Splitter', 'Tim Duncan')]],
-                [[like('Aron Baynes', 'Tim Duncan')]],
-                [[like('Tony Parker', 'Tim Duncan')]],
-                [[like('LaMarcus Aldridge', 'Tim Duncan')]],
-            ],
-        }
-        self.check_rows_with_header(stmt, expected)
-
         # stmt = '''
         # MATCH (v:player{name: 'Tim Duncan'})-[e:like*0..0]-()
         # RETURN e
         # '''
 
-        stmt = '''
-        MATCH (v:player{name: 'Tim Duncan'})-[e:like*1..1]-()
-        RETURN e
-        '''
-        expected = {
-            "column_names": ['e'],
-            "rows": [
-                [[like('Tim Duncan', 'Manu Ginobili')]],
-                [[like('Tim Duncan', 'Tony Parker')]],
-                [[like('Dejounte Murray', 'Tim Duncan')]],
-                [[like('Shaquile O\'Neal', 'Tim Duncan')]],
-                [[like('Marco Belinelli', 'Tim Duncan')]],
-                [[like('Boris Diaw', 'Tim Duncan')]],
-                [[like('Manu Ginobili', 'Tim Duncan')]],
-                [[like('Danny Green', 'Tim Duncan')]],
-                [[like('Tiago Splitter', 'Tim Duncan')]],
-                [[like('Aron Baynes', 'Tim Duncan')]],
-                [[like('Tony Parker', 'Tim Duncan')]],
-                [[like('LaMarcus Aldridge', 'Tim Duncan')]],
-            ],
-        }
-        self.check_rows_with_header(stmt, expected)
-
         # stmt = '''
         # MATCH (v:player{name: 'Tim Duncan'})-[e:like*]-()
         # RETURN e
@@ -699,41 +293,6 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite):
         # RETURN e, e2
         # '''
 
-        stmt = '''
-        MATCH (v:player{name: 'Tim Duncan'})-[e:like*2..3]-()
-        WHERE e[1].likeness>95 AND e[2].likeness==100
-        RETURN e
-        '''
-        expected = {
-            "column_names": ['e'],
-            "rows": [[[
-                like('Dejounte Murray', 'Tim Duncan'),
-                like('Dejounte Murray', 'LeBron James'),
-                like('LeBron James', 'Ray Allen'),
-            ]]],
-        }
-        self.check_rows_with_header(stmt, expected)
-
-        stmt = '''
-        MATCH (v:player{name: 'Tim Duncan'})-[e1:like*1..2]-(v2{name: 'Tony Parker'})-[e2:serve]-(v3{name: 'Spurs'})
-        RETURN e1, e2
-        '''
-        expected = {
-            "column_names": ['e1', 'e2'],
-            "rows": [
-                [[like('Dejounte Murray', 'Tim Duncan'), like('Dejounte Murray', 'Tony Parker')], serve('Tony Parker', 'Spurs')],
-                [[like('Tony Parker', 'Manu Ginobili'), like('Tim Duncan', 'Manu Ginobili')], serve('Tony Parker', 'Spurs')],
-                [[like('Marco Belinelli', 'Tim Duncan'), like('Marco Belinelli', 'Tony Parker')], serve('Tony Parker', 'Spurs')],
-                [[like('Boris Diaw', 'Tim Duncan'), like('Boris Diaw', 'Tony Parker')], serve('Tony Parker', 'Spurs')],
-                [like_2hop('Tony Parker', 'Manu Ginobili', 'Tim Duncan'), serve('Tony Parker', 'Spurs')],
-                [[like('LaMarcus Aldridge', 'Tim Duncan'), like('LaMarcus Aldridge', 'Tony Parker')], serve('Tony Parker', 'Spurs')],
-                [[like('LaMarcus Aldridge', 'Tim Duncan'), like('Tony Parker', 'LaMarcus Aldridge')], serve('Tony Parker', 'Spurs')],
-                [[like('Tim Duncan', 'Tony Parker')], serve('Tony Parker', 'Spurs')],
-                [[like('Tony Parker', 'Tim Duncan')], serve('Tony Parker', 'Spurs')],
-            ],
-        }
-        self.check_rows_with_header(stmt, expected)
-
         stmt='''
         MATCH p=(v:player{name: 'Tim Duncan'})-[:like|:serve*1..3]->(v1)
         WHERE e[0].likeness>90
diff --git a/tests/tck/conftest.py b/tests/tck/conftest.py
index 6203354d25a94c28751a176d1fe0411463fea036..2bee9e09030bc5432abd160a73074469711f4b7d 100644
--- a/tests/tck/conftest.py
+++ b/tests/tck/conftest.py
@@ -48,7 +48,8 @@ def result_should_be_relax_cmp(result, nba_space):
     ds = dataset(table(result))
     dsw = DataSetWrapper(ds)
     dscmp = DataSetWrapperComparator(strict=False, order=False)
-    assert dscmp(rs._data_set_wrapper, dsw)
+    assert dscmp(rs._data_set_wrapper, dsw), \
+        f"Response: {str(rs)} vs. Expected: {str(dsw)}"
 
 
 @then("no side effects")
diff --git a/tests/tck/features/match/VariableLengthRelationship.feature b/tests/tck/features/match/VariableLengthRelationship.feature
index f0e327449ff740682bfe5430c3e372ac2f90fa0f..4e6d3b9146a950c52a9a72c8d9c28af773362a49 100644
--- a/tests/tck/features/match/VariableLengthRelationship.feature
+++ b/tests/tck/features/match/VariableLengthRelationship.feature
@@ -1,21 +1,315 @@
-Feature: Variable length relationship match
+Feature: Variable length relationship match (m to n)
 
-  Scenario: m to n
+  Background:
     Given a graph with space named "nba"
+
+  Scenario: single both direction edge with properties
+    When executing query:
+      """
+      MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3{start_year: 2000}]-(v)
+      RETURN e, v
+      """
+    Then the result should be, in any order:
+      | e | v |
+    When executing query:
+      """
+      MATCH (:player{name:"Tim Duncan"})-[e:like*2..3{likeness: 90}]-(v)
+      RETURN e, v
+      """
+    Then the result should be, in any order, with relax comparision:
+      | e                                                                                  | v                  |
+      | [[:like "Tim Duncan"<-"Manu Ginobili"], [:like "Manu Ginobili"<-"Tiago Splitter"]] | ("Tiago Splitter") |
+
+  Scenario: single direction edge with properties
+    When executing query:
+      """
+      MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3{start_year: 2000}]->(v)
+      RETURN e, v
+      """
+    Then the result should be, in any order:
+      | e | v |
+    When executing query:
+      """
+      MATCH (:player{name:"Tim Duncan"})-[e:like*2..3{likeness: 90}]->(v)
+      RETURN e, v
+      """
+    Then the result should be, in any order:
+      | e | v |
+    When executing query:
+      """
+      MATCH (:player{name:"Tim Duncan"})<-[e:like*2..3{likeness: 90}]-(v)
+      RETURN e, v
+      """
+    Then the result should be, in any order, with relax comparision:
+      | e                                                                                  | v                  |
+      | [[:like "Tim Duncan"<-"Manu Ginobili"], [:like "Manu Ginobili"<-"Tiago Splitter"]] | ("Tiago Splitter") |
+
+  Scenario: single both direction edge without properties
+    When executing query:
+      """
+      MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3]-(v)
+      RETURN e, v
+      """
+    Then the result should be, in any order, with relax comparision:
+      | e                                                                                                                      | v                     |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Dejounte Murray"]]                                                  | ("Dejounte Murray")   |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"]]                                                  | ("Marco Belinelli")   |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Bulls"]]             | ("Bulls")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Hornets"]]           | ("Hornets")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Hawks"]]             | ("Hawks")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"76ers"]]             | ("76ers")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Spurs"@1]]           | ("Spurs")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Hornets"@1]]         | ("Hornets")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Raptors"]]           | ("Raptors")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Warriors"]]          | ("Warriors")          |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Kings"]]             | ("Kings")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Danny Green"]]                                                      | ("Danny Green")       |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Danny Green"], [:serve "Danny Green"->"Cavaliers"]]                 | ("Cavaliers")         |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Danny Green"], [:serve "Danny Green"->"Raptors"]]                   | ("Raptors")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Aron Baynes"]]                                                      | ("Aron Baynes")       |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Aron Baynes"], [:serve "Aron Baynes"->"Pistons"]]                   | ("Pistons")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Aron Baynes"], [:serve "Aron Baynes"->"Celtics"]]                   | ("Celtics")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Jonathon Simmons"]]                                                 | ("Jonathon Simmons")  |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Jonathon Simmons"], [:serve "Jonathon Simmons"->"76ers"]]           | ("76ers")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Jonathon Simmons"], [:serve "Jonathon Simmons"->"Magic"]]           | ("Magic")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Rudy Gay"]]                                                         | ("Rudy Gay")          |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Rudy Gay"], [:serve "Rudy Gay"->"Raptors"]]                         | ("Raptors")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Rudy Gay"], [:serve "Rudy Gay"->"Kings"]]                           | ("Kings")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Rudy Gay"], [:serve "Rudy Gay"->"Grizzlies"]]                       | ("Grizzlies")         |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tony Parker"]]                                                      | ("Tony Parker")       |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tony Parker"], [:serve "Tony Parker"->"Hornets"]]                   | ("Hornets")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Manu Ginobili"]]                                                    | ("Manu Ginobili")     |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"David West"]]                                                       | ("David West")        |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"David West"], [:serve "David West"->"Pacers"]]                      | ("Pacers")            |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"David West"], [:serve "David West"->"Warriors"]]                    | ("Warriors")          |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"David West"], [:serve "David West"->"Hornets"]]                     | ("Hornets")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tracy McGrady"]]                                                    | ("Tracy McGrady")     |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tracy McGrady"], [:serve "Tracy McGrady"->"Raptors"]]               | ("Raptors")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tracy McGrady"], [:serve "Tracy McGrady"->"Magic"]]                 | ("Magic")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tracy McGrady"], [:serve "Tracy McGrady"->"Rockets"]]               | ("Rockets")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1]]                                                | ("Marco Belinelli")   |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Bulls"]]           | ("Bulls")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Spurs"]]           | ("Spurs")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Hornets"]]         | ("Hornets")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Hawks"]]           | ("Hawks")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"76ers"]]           | ("76ers")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Hornets"]]         | ("Hornets")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Raptors"]]         | ("Raptors")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Warriors"]]        | ("Warriors")          |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Kings"]]           | ("Kings")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Paul Gasol"]]                                                       | ("Paul Gasol")        |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Paul Gasol"], [:serve "Paul Gasol"->"Lakers"]]                      | ("Lakers")            |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Paul Gasol"], [:serve "Paul Gasol"->"Bulls"]]                       | ("Bulls")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Paul Gasol"], [:serve "Paul Gasol"->"Grizzlies"]]                   | ("Grizzlies")         |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Paul Gasol"], [:serve "Paul Gasol"->"Bucks"]]                       | ("Bucks")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"LaMarcus Aldridge"]]                                                | ("LaMarcus Aldridge") |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"LaMarcus Aldridge"], [:serve "LaMarcus Aldridge"->"Trail Blazers"]] | ("Trail Blazers")     |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tiago Splitter"]]                                                   | ("Tiago Splitter")    |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tiago Splitter"], [:serve "Tiago Splitter"->"Hawks"]]               | ("Hawks")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tiago Splitter"], [:serve "Tiago Splitter"->"76ers"]]               | ("76ers")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Cory Joseph"]]                                                      | ("Cory Joseph")       |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Cory Joseph"], [:serve "Cory Joseph"->"Pacers"]]                    | ("Pacers")            |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Cory Joseph"], [:serve "Cory Joseph"->"Raptors"]]                   | ("Raptors")           |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Kyle Anderson"]]                                                    | ("Kyle Anderson")     |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Kyle Anderson"], [:serve "Kyle Anderson"->"Grizzlies"]]             | ("Grizzlies")         |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Boris Diaw"]]                                                       | ("Boris Diaw")        |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Boris Diaw"], [:serve "Boris Diaw"->"Suns"]]                        | ("Suns")              |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Boris Diaw"], [:serve "Boris Diaw"->"Jazz"]]                        | ("Jazz")              |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Boris Diaw"], [:serve "Boris Diaw"->"Hawks"]]                       | ("Hawks")             |
+      | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Boris Diaw"], [:serve "Boris Diaw"->"Hornets"]]                     | ("Hornets")           |
+
+  Scenario: single both direction edge without properties
+    When executing query:
+      """
+      MATCH (:player{name: "Tim Duncan"})-[e:like*2..3]-(v)
+      RETURN e |
+      YIELD COUNT(*)
+      """
+    Then the result should be, in any order:
+      | COUNT(*) |
+      | 292      |
+
+  Scenario: single direction edge without properties
+    When executing query:
+      """
+      MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3]->(v)
+      RETURN e, v
+      """
+    Then the result should be, in any order:
+      | e | v |
+    When executing query:
+      """
+      MATCH (:player{name: "Tim Duncan"})-[e:like*2..3]->(v)
+      RETURN e, v
+      """
+    Then the result should be, in any order, with relax comparision:
+      | e                                                                                                                             | v                     |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"]]                                                    | ("Tim Duncan")        |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"], [:like "Tim Duncan"->"Manu Ginobili"]]             | ("Manu Ginobili")     |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"]]                                                 | ("Manu Ginobili")     |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]]          | ("Tim Duncan")        |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"]]                                             | ("LaMarcus Aldridge") |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tony Parker"]] | ("Tony Parker")       |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tim Duncan"]]  | ("Tim Duncan")        |
+      | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]]                                                | ("Tim Duncan")        |
+      | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"], [:like "Tim Duncan"->"Tony Parker"]]           | ("Tony Parker")       |
+
+  Scenario: multiple both direction edge with properties
+    When executing query:
+      """
+      MATCH (:player{name: "Tim Duncan"})-[e:serve|like*2..3{likeness: 90}]-(v)
+      RETURN e, v
+      """
+    Then the result should be, in any order, with relax comparision:
+      | e                                                                                  | v                  |
+      | [[:like "Tim Duncan"<-"Manu Ginobili"], [:like "Manu Ginobili"<-"Tiago Splitter"]] | ("Tiago Splitter") |
+    When executing query:
+      """
+      MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3{start_year: 2000}]-(v)
+      RETURN e, v
+      """
+    Then the result should be, in any order:
+      | e | v |
+
+  Scenario: multiple direction edge with properties
     When executing query:
       """
-      MATCH (:player{name:'Tim Duncan'})-[e:serve*2..3{start_year: 2000}]-(v)
+      MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3{likeness: 90}]->(v)
       RETURN e, v
       """
     Then the result should be, in any order:
       | e | v |
-    And no side effects
     When executing query:
       """
-      MATCH (:player{name:'Tim Duncan'})<-[e:like*2..3{likeness: 90}]-(v)
+      MATCH (:player{name:"Tim Duncan"})<-[e:serve|like*2..3{likeness: 90}]-(v)
+      RETURN e, v
+      """
+    Then the result should be, in any order, with relax comparision:
+      | e                                                                                  | v                  |
+      | [[:like "Tim Duncan"<-"Manu Ginobili"], [:like "Manu Ginobili"<-"Tiago Splitter"]] | ("Tiago Splitter") |
+
+  Scenario: multiple both direction edge without properties
+    When executing query:
+      """
+      MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3]-(v)
+      RETURN e |
+      YIELD COUNT(*)
+      """
+    Then the result should be, in any order:
+      | COUNT(*) |
+      | 927      |
+
+  Scenario: multiple direction edge without properties
+    When executing query:
+      """
+      MATCH (:player{name: "Tim Duncan"})-[e:serve|like*2..3]->(v)
       RETURN e, v
       """
     Then the result should be, in any order, with relax comparision:
-      | e                                                                                      | v                  |
-      | [[:like "Tim Duncan"<-"Manu Ginobili"@0], [:like "Manu Ginobili"<-"Tiago Splitter"@0]] | ("Tiago Splitter") |
-    And no side effects
+      | e                                                                                                                                | v                     |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"]]                                                       | ("Tim Duncan")        |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"], [:like "Tim Duncan"->"Manu Ginobili"]]                | ("Manu Ginobili")     |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"], [:serve "Tim Duncan"->"Spurs"]]                       | ("Spurs")             |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"]]                                                    | ("Manu Ginobili")     |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]]             | ("Tim Duncan")        |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"], [:serve "Manu Ginobili"->"Spurs"]]                 | ("Spurs")             |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"]]                                                | ("LaMarcus Aldridge") |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tony Parker"]]    | ("Tony Parker")       |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tim Duncan"]]     | ("Tim Duncan")        |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:serve "LaMarcus Aldridge"->"Trail Blazers"]] | ("Trail Blazers")     |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:serve "LaMarcus Aldridge"->"Spurs"]]         | ("Spurs")             |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:serve "Tony Parker"->"Hornets"]]                                                         | ("Hornets")           |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:serve "Tony Parker"->"Spurs"]]                                                           | ("Spurs")             |
+      | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]]                                                   | ("Tim Duncan")        |
+      | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"], [:like "Tim Duncan"->"Tony Parker"]]              | ("Tony Parker")       |
+      | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"], [:serve "Tim Duncan"->"Spurs"]]                   | ("Spurs")             |
+      | [[:like "Tim Duncan"->"Manu Ginobili"], [:serve "Manu Ginobili"->"Spurs"]]                                                       | ("Spurs")             |
+
+  Scenario: return all
+    When executing query:
+      """
+      MATCH (:player{name:"Tim Duncan"})-[e:like*2..3]->()
+      RETURN *
+      """
+    Then the result should be, in any order, with relax comparision:
+      | e                                                                                                                             |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"]]                                                    |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"], [:like "Tim Duncan"->"Manu Ginobili"]]             |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"]]                                                 |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]]          |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"]]                                             |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tony Parker"]] |
+      | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tim Duncan"]]  |
+      | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]]                                                |
+      | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"], [:like "Tim Duncan"->"Tony Parker"]]           |
+
+  Scenario: from one step
+    When executing query:
+      """
+      MATCH (v:player{name: 'Tim Duncan'})-[e:like*1]-()
+      RETURN e
+      """
+    Then the result should be, in any order, with relax comparision:
+      | e                                           |
+      | [[:like "Tim Duncan"->"Manu Ginobili"]]     |
+      | [[:like "Tim Duncan"->"Tony Parker"]]       |
+      | [[:like "Tim Duncan"<-"Dejounte Murray"]]   |
+      | [[:like "Tim Duncan"<-"Shaquile O'Neal"]]   |
+      | [[:like "Tim Duncan"<-"Marco Belinelli"]]   |
+      | [[:like "Tim Duncan"<-"Boris Diaw"]]        |
+      | [[:like "Tim Duncan"<-"Manu Ginobili"]]     |
+      | [[:like "Tim Duncan"<-"Danny Green"]]       |
+      | [[:like "Tim Duncan"<-"Tiago Splitter"]]    |
+      | [[:like "Tim Duncan"<-"Aron Baynes"]]       |
+      | [[:like "Tim Duncan"<-"Tony Parker"]]       |
+      | [[:like "Tim Duncan"<-"LaMarcus Aldridge"]] |
+
+  Scenario: from one step to one step
+    When executing query:
+      """
+      MATCH (v:player{name: 'Tim Duncan'})-[e:like*1..1]-()
+      RETURN e
+      """
+    Then the result should be, in any order, with relax comparision:
+      | e                                           |
+      | [[:like "Tim Duncan"->"Manu Ginobili"]]     |
+      | [[:like "Tim Duncan"->"Tony Parker"]]       |
+      | [[:like "Tim Duncan"<-"Dejounte Murray"]]   |
+      | [[:like "Tim Duncan"<-"Shaquile O'Neal"]]   |
+      | [[:like "Tim Duncan"<-"Marco Belinelli"]]   |
+      | [[:like "Tim Duncan"<-"Boris Diaw"]]        |
+      | [[:like "Tim Duncan"<-"Manu Ginobili"]]     |
+      | [[:like "Tim Duncan"<-"Danny Green"]]       |
+      | [[:like "Tim Duncan"<-"Tiago Splitter"]]    |
+      | [[:like "Tim Duncan"<-"Aron Baynes"]]       |
+      | [[:like "Tim Duncan"<-"Tony Parker"]]       |
+      | [[:like "Tim Duncan"<-"LaMarcus Aldridge"]] |
+
+  Scenario: filter by edges
+    When executing query:
+      """
+      MATCH (v:player{name: 'Tim Duncan'})-[e:like*2..3]-()
+      WHERE e[1].likeness>95 AND e[2].likeness==100
+      RETURN e
+      """
+    Then the result should be, in any order, with relax comparision:
+      | e                                                                                                                         |
+      | [[:like "Tim Duncan"<-"Dejounte Murray"], [:like "Dejounte Murray"->"LeBron James"], [:like "LeBron James"->"Ray Allen"]] |
+
+  Scenario: multi-steps and filter by node properties
+    When executing query:
+      """
+      MATCH (v:player{name: 'Tim Duncan'})-[e1:like*1..2]-(v2{name: 'Tony Parker'})-[e2:serve]-(v3{name: 'Spurs'})
+      RETURN e1, e2
+      """
+    Then the result should be, in any order, with relax comparision:
+      | e1                                                                                      | e2                              |
+      | [[:like "Tim Duncan"<-"Dejounte Murray"], [:like "Dejounte Murray"->"Tony Parker"]]     | [:serve "Tony Parker"->"Spurs"] |
+      | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"<-"Tony Parker"]]         | [:serve "Tony Parker"->"Spurs"] |
+      | [[:like "Tim Duncan"<-"Marco Belinelli"], [:like "Marco Belinelli"->"Tony Parker"]]     | [:serve "Tony Parker"->"Spurs"] |
+      | [[:like "Tim Duncan"<-"Boris Diaw"], [:like "Boris Diaw"->"Tony Parker"]]               | [:serve "Tony Parker"->"Spurs"] |
+      | [[:like "Tim Duncan"<-"Manu Ginobili"], [:like "Manu Ginobili"<-"Tony Parker"]]         | [:serve "Tony Parker"->"Spurs"] |
+      | [[:like "Tim Duncan"<-"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tony Parker"]] | [:serve "Tony Parker"->"Spurs"] |
+      | [[:like "Tim Duncan"<-"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"<-"Tony Parker"]] | [:serve "Tony Parker"->"Spurs"] |
+      | [[:like "Tim Duncan"->"Tony Parker"]]                                                   | [:serve "Tony Parker"->"Spurs"] |
+      | [[:like "Tim Duncan"<-"Tony Parker"]]                                                   | [:serve "Tony Parker"->"Spurs"] |
diff --git a/tests/tck/utils/nbv.py b/tests/tck/utils/nbv.py
index bd3952c735412e3758ee37c22d8600301183f751..92df4433e10e28f71091ca0adf7208057668197b 100644
--- a/tests/tck/utils/nbv.py
+++ b/tests/tck/utils/nbv.py
@@ -346,7 +346,7 @@ def p_edge_spec(p):
     src = None
     dst = None
     props = None
-    type = 1
+    etype = 1
 
     if len(p) == 5:
         rank = p[2]
@@ -362,13 +362,13 @@ def p_edge_spec(p):
         src = p[2].get_sVal()
         dst = p[5].get_sVal()
         if p[3] == '<' and p[4] == '-':
-            type = -1
+            etype = -1
         props = p[6]
     elif len(p) == 9:
         src = p[2].get_sVal()
         dst = p[5].get_sVal()
         if p[3] == '<' and p[4] == '-':
-            type = -1
+            etype = -1
         rank = p[6]
         props = p[7]
     elif len(p) == 10:
@@ -376,14 +376,14 @@ def p_edge_spec(p):
         src = p[4].get_sVal()
         dst = p[7].get_sVal()
         if p[5] == '<' and p[6] == '-':
-            type = -1
+            etype = -1
         props = p[8]
     elif len(p) == 11:
         name = p[3]
         src = p[4].get_sVal()
         dst = p[7].get_sVal()
         if p[5] == '<' and p[6] == '-':
-            type = -1
+            etype = -1
         rank = p[8]
         props = p[9]
 
@@ -392,7 +392,7 @@ def p_edge_spec(p):
     e.src = src
     e.dst = dst
     e.props = props
-    e.type = type
+    e.type = etype
 
     p[0] = Value(eVal=e)