| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| import unittest |
| from decimal import Decimal |
| import math |
| import age |
| |
| |
| class TestAgtype(unittest.TestCase): |
| resultHandler = None |
| |
| def __init__(self, methodName: str) -> None: |
| super().__init__(methodName=methodName) |
| self.resultHandler = age.newResultHandler() |
| |
| def parse(self, exp): |
| return self.resultHandler.parse(exp) |
| |
| def test_scalar(self): |
| print("\nTesting Scalar Value Parsing. Result : ", end='') |
| |
| mapStr = '{"name": "Smith", "num":123, "yn":true, "bigInt":123456789123456789123456789123456789::numeric}' |
| arrStr = '["name", "Smith", "num", 123, "yn", true, 123456789123456789123456789123456789.8888::numeric]' |
| strStr = '"abcd"' |
| intStr = '1234' |
| floatStr = '1234.56789' |
| floatStr2 = '6.45161290322581e+46' |
| numericStr1 = '12345678901234567890123456789123456789.789::numeric' |
| numericStr2 = '12345678901234567890123456789123456789::numeric' |
| boolStr = 'true' |
| nullStr = '' |
| nanStr = "NaN" |
| infpStr = "Infinity" |
| infnStr = "-Infinity" |
| |
| mapVal = self.parse(mapStr) |
| arrVal = self.parse(arrStr) |
| str = self.parse(strStr) |
| intVal = self.parse(intStr) |
| floatVal = self.parse(floatStr) |
| floatVal2 = self.parse(floatStr2) |
| bigFloat = self.parse(numericStr1) |
| bigInt = self.parse(numericStr2) |
| boolVal = self.parse(boolStr) |
| nullVal = self.parse(nullStr) |
| nanVal = self.parse(nanStr) |
| infpVal = self.parse(infpStr) |
| infnVal = self.parse(infnStr) |
| |
| self.assertEqual(mapVal, {'name': 'Smith', 'num': 123, 'yn': True, 'bigInt': Decimal( |
| '123456789123456789123456789123456789')}) |
| self.assertEqual(arrVal, ["name", "Smith", "num", 123, "yn", True, Decimal( |
| "123456789123456789123456789123456789.8888")]) |
| self.assertEqual(str, "abcd") |
| self.assertEqual(intVal, 1234) |
| self.assertEqual(floatVal, 1234.56789) |
| self.assertEqual(floatVal2, 6.45161290322581e+46) |
| self.assertEqual(bigFloat, Decimal( |
| "12345678901234567890123456789123456789.789")) |
| self.assertEqual(bigInt, Decimal( |
| "12345678901234567890123456789123456789")) |
| self.assertEqual(boolVal, True) |
| self.assertTrue(math.isnan(nanVal)) |
| self.assertTrue(math.isinf(infpVal)) |
| self.assertTrue(math.isinf(infnVal)) |
| |
| def test_vertex(self): |
| |
| print("\nTesting vertex Parsing. Result : ", end='') |
| |
| vertexExp = '''{"id": 2251799813685425, "label": "Person", |
| "properties": {"name": "Smith", "numInt":123, "numFloat": 384.23424, |
| "bigInt":123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789::numeric, |
| "bigFloat":123456789123456789123456789123456789.12345::numeric, |
| "yn":true, "nullVal": null}}::vertex''' |
| |
| vertex = self.parse(vertexExp) |
| self.assertEqual(vertex.id, 2251799813685425) |
| self.assertEqual(vertex.label, "Person") |
| self.assertEqual(vertex["name"], "Smith") |
| self.assertEqual(vertex["numInt"], 123) |
| self.assertEqual(vertex["numFloat"], 384.23424) |
| self.assertEqual(vertex["bigInt"], Decimal( |
| "123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789")) |
| self.assertEqual(vertex["bigFloat"], Decimal( |
| "123456789123456789123456789123456789.12345")) |
| self.assertEqual(vertex["yn"], True) |
| self.assertEqual(vertex["nullVal"], None) |
| |
| def test_path(self): |
| |
| print("\nTesting Path Parsing. Result : ", end='') |
| |
| pathExp = '''[{"id": 2251799813685425, "label": "Person", "properties": {"name": "Smith"}}::vertex, |
| {"id": 2533274790396576, "label": "workWith", "end_id": 2251799813685425, "start_id": 2251799813685424, |
| "properties": {"weight": 3, "bigFloat":123456789123456789123456789.12345::numeric}}::edge, |
| {"id": 2251799813685424, "label": "Person", "properties": {"name": "Joe"}}::vertex]::path''' |
| |
| path = self.parse(pathExp) |
| vertexStart = path[0] |
| edge = path[1] |
| vertexEnd = path[2] |
| self.assertEqual(vertexStart.id, 2251799813685425) |
| self.assertEqual(vertexStart.label, "Person") |
| self.assertEqual(vertexStart["name"], "Smith") |
| |
| self.assertEqual(edge.id, 2533274790396576) |
| self.assertEqual(edge.label, "workWith") |
| self.assertEqual(edge["weight"], 3) |
| self.assertEqual(edge["bigFloat"], Decimal( |
| "123456789123456789123456789.12345")) |
| |
| self.assertEqual(vertexEnd.id, 2251799813685424) |
| self.assertEqual(vertexEnd.label, "Person") |
| self.assertEqual(vertexEnd["name"], "Joe") |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |