< Summary

Class:NanoCLang.Entities.FunctionBinding
Assembly:NanoCLang
File(s):C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\Program\FunctionBinding.cs
Covered lines:43
Uncovered lines:3
Coverable lines:46
Total lines:82
Line coverage:93.4% (43 of 46)
Covered branches:28
Total branches:34
Branch coverage:82.3% (28 of 34)

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%1100%
get_Definition()100%1100%
get_Body()100%1100%
get_Name()100%1100%
WellFormed(...)100%1100%
Tokens()85.71%14100%
Tokens()92.85%14100%
Equals(...)100%1100%
Equals(...)50%6100%
GetHashCode()100%10%
op_Equality(...)100%10%
op_Inequality(...)100%10%

File(s)

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

#LineLine coverage
 1using NanoCLang.Environemnts;
 2using System;
 3using System.Collections.Generic;
 4
 5namespace NanoCLang.Entities {
 6    /// <summary>
 7    /// Provides a class for function bindings.
 8    /// </summary>
 9    public class FunctionBinding : Program, IEquatable<FunctionBinding?> {
 10        /// <summary>
 11        /// Creates a new instance of a function binding that binds the <paramref name="definition"/> to the function <p
 12        /// </summary>
 13        /// <param name="name">Name that the function is bound to.</param>
 14        /// <param name="definition">Definition of the function.</param>
 15        /// <param name="body">Program that the function name is bound in.</param>
 10016        public FunctionBinding(string name, FunctionDefinition definition, Program body) {
 5017            Name = name;
 5018            Definition = definition;
 5019            Body = body;
 5020        }
 21        /// <summary>
 22        /// Definition of the function.
 23        /// </summary>
 15524        public FunctionDefinition Definition { get; }
 25        /// <summary>
 26        /// Program that the function name is bound in.
 27        /// </summary>
 17828        public Program Body { get; }
 29        /// <summary>
 30        /// Name that the function is bound to.
 31        /// </summary>
 15232        public string Name { get; }
 33        /// <inheritdoc/>
 2234        public override World WellFormed(GlobalEnvironment phi) {
 2235            VerbConsole.WriteLine(VerbosityLevel.Default, $"WF-FunctionBinding: {Name}");
 4336            return phi.With(this, phi => {
 2137                Definition.WellFormed(phi, Name);
 2138                return Body.WellFormed(phi);
 4239            });
 2040        }
 41        /// <inheritdoc/>
 2042        public override IEnumerable<StringFormatterToken> Tokens(NanoCSourceFormat args) {
 2043            yield return "letf";
 2044            yield return " ";
 2045            yield return Name;
 4046            if (args.SpaceBeforeBindingAssignment) yield return " ";
 2047            yield return "=";
 4048            if (args.SpaceAfterBindingAssignment) yield return " ";
 1096849            foreach (var tk in Definition.Tokens(args)) yield return tk;
 2050            yield return " ";
 2051            yield return "in";
 2052            if (Body is null) yield break;
 2053            if (args.NewlinesAfterFunctionBinding <= 0) yield return " ";
 16054            else for (int i = 0; i < args.NewlinesAfterFunctionBinding; i++) yield return new NewLineToken();
 1535155            foreach (var tk in Body.Tokens(args)) yield return tk;
 2056        }
 57        /// <inheritdoc/>
 2558        public override IEnumerable<StringFormatterToken> Tokens(CSourceFormat args) {
 11159            foreach(var tk in Program.PrintHeader(args)) yield return tk;
 17160            foreach (var tk in Definition.Schema.World.Type.Tokens(args)) yield return tk;
 2561            yield return " ";
 2562            yield return Name;
 545463            foreach (var tk in Definition.Tokens(args)) yield return tk;
 2564            if (Body is null) yield break;
 15065            for (int i = 0; i < args.NewlinesAfterFunctionBinding; i++)
 5066                yield return new NewLineToken();
 989267            if (!(Body is null)) foreach (var tk in Body.Tokens(args)) yield return tk;
 2568        }
 69        #region Equality checks
 70        /// <inheritdoc/>
 2171        public override bool Equals(object? obj) => Equals(obj as FunctionBinding);
 72        /// <inheritdoc/>
 2173        public bool Equals(FunctionBinding? other) => !(other is null) && EqualityComparer<FunctionDefinition>.Default.E
 74        /// <inheritdoc/>
 075        public override int GetHashCode() => HashCode.Combine(Definition, Body, Name);
 76        /// <inheritdoc/>
 077        public static bool operator ==(FunctionBinding? left, FunctionBinding? right) => EqualityComparer<FunctionBindin
 78        /// <inheritdoc/>
 079        public static bool operator !=(FunctionBinding? left, FunctionBinding? right) => !(left == right);
 80        #endregion
 81    }
 82}