< Summary

Class:NanoCLang.Entities.ConcatenationExpression
Assembly:NanoCLang
File(s):C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\Expression\ConcatenationExpression.cs
Covered lines:33
Uncovered lines:3
Coverable lines:36
Total lines:70
Line coverage:91.6% (33 of 36)
Covered branches:13
Total branches:16
Branch coverage:81.2% (13 of 16)

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%1100%
get_Expression()100%1100%
get_Next()100%1100%
DoInferWorld(...)100%1100%
Tokens()87.5%8100%
RequiredFunctions()100%1100%
Tokens()100%4100%
Equals(...)100%1100%
Equals(...)50%4100%
GetHashCode()100%10%
op_Equality(...)100%10%
op_Inequality(...)100%10%

File(s)

C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\Expression\ConcatenationExpression.cs

#LineLine coverage
 1using NanoCLang.Environemnts;
 2using System;
 3using System.Collections.Generic;
 4using System.Linq;
 5
 6namespace NanoCLang.Entities {
 7    /// <summary>
 8    /// Provides a class for binding expressions.
 9    /// </summary>
 10    public class ConcatenationExpression : Expression, IEquatable<ConcatenationExpression?> {
 11        /// <summary>
 12        /// Creates a new instance of a concatenation expression that evaluates the <paramref name="expression"/> and th
 13        /// </summary>
 14        /// <param name="expression">Expression that is evaluated first.</param>
 15        /// <param name="next">Expression that is evaluated second.</param>
 13816        public ConcatenationExpression(Expression expression, Expression next) {
 6917            Expression = expression;
 6918            Next = next;
 6919        }
 20        /// <summary>
 21        /// Expression that is evaluated first.
 22        /// </summary>
 17123        public Expression Expression { get; }
 24        /// <summary>
 25        /// Expression that is evaluated with the binding.
 26        /// </summary>
 17127        public Expression Next { get; }
 28        /// <inheritdoc/>
 3229        protected override World DoInferWorld(GlobalEnvironment phi, LocalEnvironment gamma, Heap heap) {
 3230            VerbConsole.WriteLine(VerbosityLevel.Default, "T-Concat");
 3231            var expressionWorld = Expression.InferWorld(phi, gamma, heap);
 3232            return Next.InferWorld(phi, gamma, expressionWorld.Heap);
 3233        }
 34        /// <inheritdoc/>
 3135        public override IEnumerable<StringFormatterToken> Tokens(NanoCSourceFormat args) {
 3136            yield return "let";
 3137            yield return " ";
 101738            foreach (var tk in Expression.Tokens(args)) yield return tk;
 3139            yield return " ";
 3140            yield return "in";
 3141            if (args.NewlinesAfterBindingExpression <= 0) yield return " ";
 15542            else for (int i = 0; i < args.NewlinesAfterBindingExpression; i++) yield return new NewLineToken();
 197743            foreach (var tk in Next.Tokens(args)) yield return tk;
 3144        }
 45        /// <inheritdoc/>
 946        public override IEnumerable<string> RequiredFunctions() => Expression.RequiredFunctions().Concat(Next.RequiredFu
 47        /// <inheritdoc/>
 3748        public override IEnumerable<StringFormatterToken> Tokens(CSourceFormat args) {
 3749            args.PureRequiresReturn = false;
 153950            foreach (var tk in Expression.Tokens(args)) yield return tk;
 3751            yield return ";";
 3752            yield return new NewLineToken();
 3753            args.PureRequiresReturn = true;
 259854            foreach (var tk in Next.Tokens(args)) yield return tk;
 3755            yield return ";";
 3756        }
 57        #region Equality checks
 58        /// <inheritdoc/>
 3159        public override bool Equals(object? obj) => Equals(obj as ConcatenationExpression);
 60        /// <inheritdoc/>
 3161        public bool Equals(ConcatenationExpression? other) => !(other is null) && EqualityComparer<Expression>.Default.E
 62        /// <inheritdoc/>
 063        public override int GetHashCode() => HashCode.Combine(Expression, Next);
 64        /// <inheritdoc/>
 065        public static bool operator ==(ConcatenationExpression? left, ConcatenationExpression? right) => EqualityCompare
 66        /// <inheritdoc/>
 067        public static bool operator !=(ConcatenationExpression? left, ConcatenationExpression? right) => !(left == right
 68        #endregion
 69    }
 70}