< Summary

Class:NanoCLang.Entities.AssertionExpression
Assembly:NanoCLang
File(s):C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\Expression\PureExpression\AssertionExpression.cs
Covered lines:30
Uncovered lines:5
Coverable lines:35
Total lines:67
Line coverage:85.7% (30 of 35)
Covered branches:10
Total branches:14
Branch coverage:71.4% (10 of 14)

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%1100%
get_Expression()100%1100%
WellFormed(...)100%10%
DoInferType(...)100%2100%
Tokens()75%4100%
Tokens()100%2100%
CheckType(...)50%4100%
Replace(...)100%10%
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\PureExpression\AssertionExpression.cs

#LineLine coverage
 1using NanoCLang.Environemnts;
 2using System;
 3using System.Collections.Generic;
 4
 5namespace NanoCLang.Entities {
 6    /// <summary>
 7    /// Provides a class for assertions.
 8    /// </summary>
 9    public class AssertionExpression : PureExpression, IEquatable<AssertionExpression?> {
 10        /// <summary>
 11        /// Creates a new assertion expression instance that asserts that the <paramref name="expression"/> is truty.
 12        /// </summary>
 13        /// <param name="expression">Expression to evaluate.</param>
 3014        public AssertionExpression(PureExpression expression) {
 1515            Expression = expression;
 1516        }
 17        /// <summary>
 18        /// Expression to evaluate.
 19        /// </summary>
 3320        public PureExpression Expression { get; }
 21        /// <inheritdoc/>
 022        public override void WellFormed(LocalEnvironment gamma) => Expression.WellFormed(gamma);
 23        /// <inheritdoc/>
 724        protected override Type DoInferType(LocalEnvironment gamma) {
 725            var type = Expression.InferType(gamma);
 1426            if (!type.SubType(gamma, new RefinedType(new IntegerType(type.Size), v => UnqualExpression(v, (PureExpressio
 227                throw new IllFormedException(Expression, $"Assertion failed!");
 528            return IntegerType.Void;
 529        }
 30        /// <inheritdoc/>
 631        public override IEnumerable<StringFormatterToken> Tokens(NanoCSourceFormat args) {
 632            yield return "assert";
 633            if (args.SpaceAfterFunctionName) yield return " ";
 634            yield return "(";
 33635            foreach (var tk in Expression.Tokens(args)) yield return tk;
 636            yield return ")";
 637        }
 38        /// <inheritdoc/>
 239        public override IEnumerable<StringFormatterToken> Tokens(CSourceFormat args) {
 240            yield return "/* ";
 15041            foreach (var tk in Tokens((NanoCSourceFormat)args)) yield return tk;
 242            yield return " */";
 243        }
 44        /// <inheritdoc/>
 245        public override void CheckType(LocalEnvironment gamma, Type type) {
 246            VerbConsole.WriteLine(VerbosityLevel.Default, $"T-Assert: {Expression}");
 247            if (!(type is IntegerType i && i.IsVoid)) throw new IllFormedException(this, $"Assertion expression is of ty
 248            var inferredType = Expression.InferType(gamma);
 449            Expression.CheckType(gamma, new RefinedType(new IntegerType(inferredType.Size), v => UnqualExpression(v, (Pu
 150        }
 51        /// <inheritdoc/>
 52        public override PureExpression Replace(Substitutor sub)
 053            => new AssertionExpression(Expression.Replace(sub));
 54        #region Equality checks
 55        /// <inheritdoc/>
 656        public override bool Equals(object? obj) => Equals(obj as AssertionExpression);
 57        /// <inheritdoc/>
 658        public bool Equals(AssertionExpression? other) => !(other is null) && EqualityComparer<PureExpression>.Default.E
 59        /// <inheritdoc/>
 060        public override int GetHashCode() => System.HashCode.Combine(Expression);
 61        /// <inheritdoc/>
 062        public static bool operator ==(AssertionExpression? left, AssertionExpression? right) => EqualityComparer<Assert
 63        /// <inheritdoc/>
 064        public static bool operator !=(AssertionExpression? left, AssertionExpression? right) => !(left == right);
 65        #endregion
 66    }
 67}