< Summary

Class:NanoCLang.Entities.LocationBinding
Assembly:NanoCLang
File(s):C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\LocationBinding.cs
Covered lines:17
Uncovered lines:10
Coverable lines:27
Total lines:59
Line coverage:62.9% (17 of 27)
Covered branches:8
Total branches:14
Branch coverage:57.1% (8 of 14)

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%1100%
get_Location()100%1100%
get_Blocks()100%1100%
Tokens()100%8100%
GetBindings(...)100%1100%
Equals(...)100%10%
Equals(...)0%40%
GetHashCode()0%20%
op_Equality(...)100%10%
op_Inequality(...)100%10%

File(s)

C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\LocationBinding.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 location bindings.
 9    /// </summary>
 10    public class LocationBinding : Base, IEquatable<LocationBinding?>, IHeapElement {
 11        /// <summary>
 12        /// Creates a new instance of a location binding that binds the <paramref name="blocks"/> to the <paramref name=
 13        /// </summary>
 14        /// <param name="location">Location that is bound to.</param>
 15        /// <param name="blocks">Blocks that are bound in the location.</param>
 44216        public LocationBinding(Location location, BlockType[] blocks) {
 22117            Location = location;
 22118            Blocks = blocks;
 22119        }
 20        /// <summary>
 21        /// Location that is bound to.
 22        /// </summary>
 59423        public Location Location { get; }
 24        /// <summary>
 25        /// Blocks that are bound in the location.
 26        /// </summary>
 32127        public BlockType[] Blocks { get; }
 28        /// <inheritdoc/>
 4829        public override IEnumerable<StringFormatterToken> Tokens(NanoCSourceFormat args) {
 39030            foreach (var tk in Location.Tokens(args)) yield return tk;
 9631            if (args.SpaceBetweenLocationAndBindOperator) yield return " ";
 4832            yield return "~>";
 9633            if (args.SpaceBetweenBindOperatorAndBlock) yield return " ";
 263734            foreach (var tk in StringFormatterToken.Separated(Blocks, args, args.BlockSeparator)) yield return tk;
 4835        }
 36        /// <inheritdoc cref="IHeapElement.GetBindings(GlobalEnvironment, out IEnumerable{KeyValuePair{string, string}})
 9137        public IEnumerable<LocationBinding> GetBindings(GlobalEnvironment phi, out IEnumerable<KeyValuePair<string, stri
 9138            links = Enumerable.Empty<KeyValuePair<string, string>>();
 9139            return new LocationBinding[] { this };
 9140        }
 41        #region Equality checks
 42        /// <inheritdoc/>
 043        public override bool Equals(object? obj) => Equals(obj as LocationBinding);
 44        /// <inheritdoc/>
 045        public bool Equals(LocationBinding? other) => !(other is null) && EqualityComparer<Location>.Default.Equals(Loca
 46        /// <inheritdoc/>
 047        public override int GetHashCode() {
 048            var hash = new HashCode();
 049            hash.Add(Location);
 050            foreach (var block in Blocks) hash.Add(block);
 051            return hash.ToHashCode();
 052        }
 53        /// <inheritdoc/>
 054        public static bool operator ==(LocationBinding? left, LocationBinding? right) => EqualityComparer<LocationBindin
 55        /// <inheritdoc/>
 056        public static bool operator !=(LocationBinding? left, LocationBinding? right) => !(left == right);
 57        #endregion
 58    }
 59}