< Summary

Class:NanoCLang.Entities.ArrayReadExpression
Assembly:NanoCLang
File(s):C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\Expression\ArrayReadExpression.cs
Covered lines:20
Uncovered lines:3
Coverable lines:23
Total lines:55
Line coverage:86.9% (20 of 23)
Covered branches:5
Total branches:6
Branch coverage:83.3% (5 of 6)

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%1100%
get_Array()100%1100%
get_Offset()100%1100%
DoInferWorld(...)100%1100%
Tokens()100%4100%
RequiredFunctions()100%1100%
Equals(...)100%1100%
Equals(...)50%2100%
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\ArrayReadExpression.cs

#LineLine coverage
 1using NanoCLang.Environemnts;
 2using System;
 3using System.Collections.Generic;
 4
 5namespace NanoCLang.Entities {
 6    /// <summary>
 7    /// Provides a class for array read expressions.
 8    /// </summary>
 9    public class ArrayReadExpression : ReadExpression, IEquatable<ArrayReadExpression?> {
 10        /// <summary>
 11        /// Creates a new instance of a array read expression that reads the value of the <paramref name="array"/>.
 12        /// </summary>
 13        /// <param name="array">Array to write to.</param>
 14        /// <param name="offset">Offset in the array to access.</param>
 1215        public ArrayReadExpression(PureExpression array, PureExpression offset) {
 616            Array = array;
 617            Offset = offset;
 618        }
 19        /// <summary>
 20        /// Array that is read from.
 21        /// </summary>
 1022        public PureExpression Array { get; }
 23        /// <summary>
 24        /// Offset in the array to access.
 25        /// </summary>
 626        public PureExpression Offset { get; }
 27        /// <inheritdoc/>
 428        protected override World DoInferWorld(GlobalEnvironment phi, LocalEnvironment gamma, Heap heap) {
 429            VerbConsole.WriteLine(VerbosityLevel.Default, "T-ArrRead");
 430            return (BaseRead = new PointerReadExpression(ArrayWriteExpression.GetArrayPointer(gamma, Array, Offset)))
 431                .InferWorld(phi, gamma, heap);
 332        }
 33        /// <inheritdoc/>
 234        public override IEnumerable<StringFormatterToken> Tokens(NanoCSourceFormat args) {
 1235            foreach (var tk in Array.Tokens(args)) yield return tk;
 236            yield return "[";
 2437            foreach (var tk in Offset.Tokens(args)) yield return tk;
 238            yield return "]";
 239        }
 40        /// <inheritdoc/>
 441        public override IEnumerable<string> RequiredFunctions() { yield break; }
 42        #region Equality checks
 43        /// <inheritdoc/>
 244        public override bool Equals(object? obj) => Equals(obj as ArrayReadExpression);
 45        /// <inheritdoc/>
 246        public bool Equals(ArrayReadExpression? other) => !(other is null) && EqualityComparer<PureExpression>.Default.E
 47        /// <inheritdoc/>
 048        public override int GetHashCode() => HashCode.Combine(Array);
 49        /// <inheritdoc/>
 050        public static bool operator ==(ArrayReadExpression? left, ArrayReadExpression? right) => EqualityComparer<ArrayR
 51        /// <inheritdoc/>
 052        public static bool operator !=(ArrayReadExpression? left, ArrayReadExpression? right) => !(left == right);
 53        #endregion
 54    }
 55}