Skip to content

Commit

Permalink
#542 - Implement value comparison. (#543)
Browse files Browse the repository at this point in the history
  • Loading branch information
sys27 committed May 8, 2022
1 parent c33bbce commit dfdc7d3
Show file tree
Hide file tree
Showing 15 changed files with 837 additions and 32 deletions.
49 changes: 47 additions & 2 deletions xFunc.Maths/Analyzers/TypeAnalyzers/TypeAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,25 @@ private ResultTypes AnalyzeRelational([NotNull] BinaryExpression? exp)
(ResultTypes.Undefined, ResultTypes.PowerNumber) or
(ResultTypes.TemperatureNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.TemperatureNumber) or
(ResultTypes.MassNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.MassNumber) or
(ResultTypes.LengthNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.LengthNumber) or
(ResultTypes.TimeNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.TimeNumber) or
(ResultTypes.AreaNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.AreaNumber) or
(ResultTypes.VolumeNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.VolumeNumber) or
(ResultTypes.Number, ResultTypes.Number) or
(ResultTypes.AngleNumber, ResultTypes.AngleNumber) or
(ResultTypes.PowerNumber, ResultTypes.PowerNumber) or
(ResultTypes.TemperatureNumber, ResultTypes.TemperatureNumber)
(ResultTypes.TemperatureNumber, ResultTypes.TemperatureNumber) or
(ResultTypes.MassNumber, ResultTypes.MassNumber) or
(ResultTypes.LengthNumber, ResultTypes.LengthNumber) or
(ResultTypes.TimeNumber, ResultTypes.TimeNumber) or
(ResultTypes.AreaNumber, ResultTypes.AreaNumber) or
(ResultTypes.VolumeNumber, ResultTypes.VolumeNumber)
=> ResultTypes.Boolean,

(_, ResultTypes.Number) => ResultTypes.Number.ThrowForLeft(leftResult),
Expand Down Expand Up @@ -206,11 +221,26 @@ private ResultTypes AnalyzeEquality([NotNull] BinaryExpression? exp)
(ResultTypes.Undefined, ResultTypes.PowerNumber) or
(ResultTypes.TemperatureNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.TemperatureNumber) or
(ResultTypes.MassNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.MassNumber) or
(ResultTypes.LengthNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.LengthNumber) or
(ResultTypes.TimeNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.TimeNumber) or
(ResultTypes.AreaNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.AreaNumber) or
(ResultTypes.VolumeNumber, ResultTypes.Undefined) or
(ResultTypes.Undefined, ResultTypes.VolumeNumber) or
(ResultTypes.Number, ResultTypes.Number) or
(ResultTypes.Boolean, ResultTypes.Boolean) or
(ResultTypes.AngleNumber, ResultTypes.AngleNumber) or
(ResultTypes.PowerNumber, ResultTypes.PowerNumber) or
(ResultTypes.TemperatureNumber, ResultTypes.TemperatureNumber)
(ResultTypes.TemperatureNumber, ResultTypes.TemperatureNumber) or
(ResultTypes.MassNumber, ResultTypes.MassNumber) or
(ResultTypes.LengthNumber, ResultTypes.LengthNumber) or
(ResultTypes.TimeNumber, ResultTypes.TimeNumber) or
(ResultTypes.AreaNumber, ResultTypes.AreaNumber) or
(ResultTypes.VolumeNumber, ResultTypes.VolumeNumber)
=> ResultTypes.Boolean,

(_, ResultTypes.Number) => ResultTypes.Number.ThrowForLeft(leftResult),
Expand All @@ -228,6 +258,21 @@ private ResultTypes AnalyzeEquality([NotNull] BinaryExpression? exp)
(_, ResultTypes.TemperatureNumber) => ResultTypes.TemperatureNumber.ThrowForLeft(leftResult),
(ResultTypes.TemperatureNumber, _) => ResultTypes.TemperatureNumber.ThrowForRight(rightResult),

(_, ResultTypes.MassNumber) => ResultTypes.MassNumber.ThrowForLeft(leftResult),
(ResultTypes.MassNumber, _) => ResultTypes.MassNumber.ThrowForRight(rightResult),

(_, ResultTypes.LengthNumber) => ResultTypes.LengthNumber.ThrowForLeft(leftResult),
(ResultTypes.LengthNumber, _) => ResultTypes.LengthNumber.ThrowForRight(rightResult),

(_, ResultTypes.TimeNumber) => ResultTypes.TimeNumber.ThrowForLeft(leftResult),
(ResultTypes.TimeNumber, _) => ResultTypes.TimeNumber.ThrowForRight(rightResult),

(_, ResultTypes.AreaNumber) => ResultTypes.AreaNumber.ThrowForLeft(leftResult),
(ResultTypes.AreaNumber, _) => ResultTypes.AreaNumber.ThrowForRight(rightResult),

(_, ResultTypes.VolumeNumber) => ResultTypes.VolumeNumber.ThrowForLeft(leftResult),
(ResultTypes.VolumeNumber, _) => ResultTypes.VolumeNumber.ThrowForRight(rightResult),

_ => throw new ParameterTypeMismatchException(),
};
}
Expand Down
5 changes: 5 additions & 0 deletions xFunc.Maths/Expressions/Programming/Equal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ public override object Execute(ExpressionParameters? parameters)
(AngleValue left, AngleValue right) => left == right,
(PowerValue left, PowerValue right) => left == right,
(TemperatureValue left, TemperatureValue right) => left == right,
(MassValue left, MassValue right) => left == right,
(LengthValue left, LengthValue right) => left == right,
(TimeValue left, TimeValue right) => left == right,
(AreaValue left, AreaValue right) => left == right,
(VolumeValue left, VolumeValue right) => left == right,
_ => throw new ResultIsNotSupportedException(this, leftResult, rightResult),
};
}
Expand Down
5 changes: 5 additions & 0 deletions xFunc.Maths/Expressions/Programming/GreaterOrEqual.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ public override object Execute(ExpressionParameters? parameters)
(AngleValue left, AngleValue right) => left >= right,
(PowerValue left, PowerValue right) => left >= right,
(TemperatureValue left, TemperatureValue right) => left >= right,
(MassValue left, MassValue right) => left >= right,
(LengthValue left, LengthValue right) => left >= right,
(TimeValue left, TimeValue right) => left >= right,
(AreaValue left, AreaValue right) => left >= right,
(VolumeValue left, VolumeValue right) => left >= right,
_ => throw new ResultIsNotSupportedException(this, leftResult, rightResult),
};
}
Expand Down
5 changes: 5 additions & 0 deletions xFunc.Maths/Expressions/Programming/GreaterThan.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ public override object Execute(ExpressionParameters? parameters)
(AngleValue left, AngleValue right) => left > right,
(PowerValue left, PowerValue right) => left > right,
(TemperatureValue left, TemperatureValue right) => left > right,
(MassValue left, MassValue right) => left > right,
(LengthValue left, LengthValue right) => left > right,
(TimeValue left, TimeValue right) => left > right,
(AreaValue left, AreaValue right) => left > right,
(VolumeValue left, VolumeValue right) => left > right,
_ => throw new ResultIsNotSupportedException(this, leftResult, rightResult),
};
}
Expand Down
5 changes: 5 additions & 0 deletions xFunc.Maths/Expressions/Programming/LessOrEqual.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ public override object Execute(ExpressionParameters? parameters)
(AngleValue left, AngleValue right) => left <= right,
(PowerValue left, PowerValue right) => left <= right,
(TemperatureValue left, TemperatureValue right) => left <= right,
(MassValue left, MassValue right) => left <= right,
(LengthValue left, LengthValue right) => left <= right,
(TimeValue left, TimeValue right) => left <= right,
(AreaValue left, AreaValue right) => left <= right,
(VolumeValue left, VolumeValue right) => left <= right,
_ => throw new ResultIsNotSupportedException(this, leftResult, rightResult),
};
}
Expand Down
5 changes: 5 additions & 0 deletions xFunc.Maths/Expressions/Programming/LessThan.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ public override object Execute(ExpressionParameters? parameters)
(AngleValue left, AngleValue right) => left < right,
(PowerValue left, PowerValue right) => left < right,
(TemperatureValue left, TemperatureValue right) => left < right,
(MassValue left, MassValue right) => left < right,
(LengthValue left, LengthValue right) => left < right,
(TimeValue left, TimeValue right) => left < right,
(AreaValue left, AreaValue right) => left < right,
(VolumeValue left, VolumeValue right) => left < right,
_ => throw new ResultIsNotSupportedException(this, leftResult, rightResult),
};
}
Expand Down
5 changes: 5 additions & 0 deletions xFunc.Maths/Expressions/Programming/NotEqual.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ public override object Execute(ExpressionParameters? parameters)
(AngleValue left, AngleValue right) => left != right,
(PowerValue left, PowerValue right) => left != right,
(TemperatureValue left, TemperatureValue right) => left != right,
(MassValue left, MassValue right) => left != right,
(LengthValue left, LengthValue right) => left != right,
(TimeValue left, TimeValue right) => left != right,
(AreaValue left, AreaValue right) => left != right,
(VolumeValue left, VolumeValue right) => left != right,
_ => throw new ResultIsNotSupportedException(this, leftResult, rightResult),
};
}
Expand Down

0 comments on commit dfdc7d3

Please sign in to comment.