< Summary

Class:NanoCLang.Entities.ArbitraryIndex
Assembly:NanoCLang
File(s):C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\Index\ArbitraryIndex.cs
Covered lines:8
Uncovered lines:7
Coverable lines:15
Total lines:43
Line coverage:53.3% (8 of 15)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
CollidesWith(...)100%10%
SMTPossibleValues(...)100%10%
Tokens()100%1100%
SubIndex(...)100%1100%
IncludesOffset(...)100%1100%
Add(...)100%10%
Sub(...)100%10%
Clone()100%1100%
Equals(...)100%1100%
Equals(...)100%1100%
GetHashCode()100%10%
op_Equality(...)100%10%
op_Inequality(...)100%10%

File(s)

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

#LineLine coverage
 1using Microsoft.Z3;
 2using System;
 3using System.Collections.Generic;
 4
 5namespace NanoCLang.Entities {
 6    /// <summary>
 7    /// Provides a class for arbitrary indices.
 8    /// </summary>
 9    public class ArbitraryIndex : Index, IEquatable<ArbitraryIndex?> {
 10        /// <inheritdoc/>
 11        // Arbitrary indices always overlap with everything
 012        public override bool CollidesWith(int size, Index index, int otherSize) => true;
 13        /// <inheritdoc/>
 14        public override (BoolExpr guard, IntExpr value) SMTPossibleValues(NanoCSMT smt, int size, string prefix)
 015            => (smt.Context.MkTrue(), smt.Context.MkIntConst($"{prefix}arbindex"));
 16        /// <inheritdoc/>
 517        public override IEnumerable<StringFormatterToken> Tokens(NanoCSourceFormat args) {
 518            yield return "any";
 519        }
 20        /// <inheritdoc/>
 521        public override bool SubIndex(Index other) => other is ArbitraryIndex;
 22        /// <inheritdoc/>
 2623        public override bool IncludesOffset(int offset) => true;
 24        /// <inheritdoc/>
 025        protected override Index Add(Index right) => new ArbitraryIndex();
 26        /// <inheritdoc/>
 027        protected override Index Sub(Index right) => new ArbitraryIndex();
 28        /// <inheritdoc/>
 25229        public override object Clone() => new ArbitraryIndex();
 30        #region Equality checks
 31        /// <inheritdoc/>
 25132        public override bool Equals(object? obj) => Equals(obj as ArbitraryIndex);
 33        /// <inheritdoc/>
 25134        public bool Equals(ArbitraryIndex? other) => !(other is null);
 35        /// <inheritdoc/>
 036        public override int GetHashCode() => 0;
 37        /// <inheritdoc/>
 038        public static bool operator ==(ArbitraryIndex? left, ArbitraryIndex? right) => EqualityComparer<ArbitraryIndex?>
 39        /// <inheritdoc/>
 040        public static bool operator !=(ArbitraryIndex? left, ArbitraryIndex? right) => !(left == right);
 41        #endregion
 42    }
 43}