blob: 69bbbc298d9edd8e55a4429152ad7448fe101c85 [file] [log] [blame]
# 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()