| # 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() |