blob: cea8e231cc2c8a62df3eb4edcb320a3a95f79617 [file] [log] [blame]
#region License
/*
* 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.
*/
#endregion
using System;
using Gremlin.Net.Process.Traversal;
using Xunit;
namespace Gremlin.Net.IntegrationTest.Process.Traversal.BytecodeGeneration
{
public class BytecodeGenerationTests
{
[Fact]
public void GraphTraversalStepsShouldUnrollParamsParameters()
{
var g = AnonymousTraversalSource.Traversal();
var bytecode = g.V().HasLabel("firstLabel", "secondLabel", "thirdLabel").Bytecode;
Assert.Empty(bytecode.SourceInstructions);
Assert.Equal(2, bytecode.StepInstructions.Count);
Assert.Equal(3, bytecode.StepInstructions[1].Arguments.Length);
}
[Fact]
public void g_V_OutXcreatedX()
{
var g = AnonymousTraversalSource.Traversal();
var bytecode = g.V().Out("created").Bytecode;
Assert.Empty(bytecode.SourceInstructions);
Assert.Equal(2, bytecode.StepInstructions.Count);
Assert.Equal("V", bytecode.StepInstructions[0].OperatorName);
Assert.Equal("out", bytecode.StepInstructions[1].OperatorName);
Assert.Equal("created", bytecode.StepInstructions[1].Arguments[0]);
Assert.Single(bytecode.StepInstructions[1].Arguments);
}
[Fact]
public void g_WithSackX1X_E_GroupCount_ByXweightX()
{
var g = AnonymousTraversalSource.Traversal();
var bytecode = g.WithSack(1).E().GroupCount<double>().By("weight").Bytecode;
Assert.Single(bytecode.SourceInstructions);
Assert.Equal("withSack", bytecode.SourceInstructions[0].OperatorName);
Assert.Equal(1, bytecode.SourceInstructions[0].Arguments[0]);
Assert.Equal(3, bytecode.StepInstructions.Count);
Assert.Equal("E", bytecode.StepInstructions[0].OperatorName);
Assert.Equal("groupCount", bytecode.StepInstructions[1].OperatorName);
Assert.Equal("by", bytecode.StepInstructions[2].OperatorName);
Assert.Equal("weight", bytecode.StepInstructions[2].Arguments[0]);
Assert.Empty(bytecode.StepInstructions[0].Arguments);
Assert.Empty(bytecode.StepInstructions[1].Arguments);
Assert.Single(bytecode.StepInstructions[2].Arguments);
}
[Fact]
public void g_InjectX1_2_3X()
{
var g = AnonymousTraversalSource.Traversal();
var bytecode = g.Inject(1, 2, 3).Bytecode;
Assert.Single(bytecode.StepInstructions);
Assert.Equal("inject", bytecode.StepInstructions[0].OperatorName);
Assert.Equal(3, bytecode.StepInstructions[0].Arguments.Length);
}
[Fact]
public void AnonymousTraversal_Start_EmptyBytecode()
{
var bytecode = __.Start().Bytecode;
Assert.Empty(bytecode.SourceInstructions);
Assert.Empty(bytecode.StepInstructions);
}
[Fact]
public void AnonymousTraversal_VXnullX()
{
var bytecode = __.V(null).Bytecode;
Assert.Single(bytecode.StepInstructions);
Assert.Single(bytecode.StepInstructions[0].Arguments);
Assert.Null(bytecode.StepInstructions[0].Arguments[0]);
}
[Fact]
public void AnonymousTraversal_OutXnullX()
{
Assert.Throws<ArgumentNullException>(() => __.Out(null!));
}
}
}