public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context) { ValidateArguments(arguments, 1); var firstArg = arguments.ElementAt(0).Value.ToString(); if (arguments.Count() == 1 && TimeStringParser.CanParse(firstArg)) { var result = TimeStringParser.Parse(firstArg); return(CreateResult(GetMinuteFromSerialNumber(result), DataType.Integer)); } ValidateAndInitSerialNumber(arguments); return(CreateResult(GetMinuteFromSerialNumber(SerialNumber), DataType.Integer)); }
public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context) { ValidateArguments(arguments, 1); var firstArg = arguments.ElementAt(0).Value.ToString(); if (arguments.Count() == 1 && TimeStringParser.CanParse(firstArg)) { var result = TimeStringParser.Parse(firstArg); return(new CompileResult(result, DataType.Time)); } ValidateArguments(arguments, 3); var hour = ArgToInt(arguments, 0); var min = ArgToInt(arguments, 1); var sec = ArgToInt(arguments, 2); ThrowArgumentExceptionIf(() => sec < 0 || sec > 59, "Invalid second: " + sec); ThrowArgumentExceptionIf(() => min < 0 || min > 59, "Invalid minute: " + min); ThrowArgumentExceptionIf(() => min < 0 || hour > 23, "Invalid hour: " + hour); var secondsOfThisTime = (double)(hour * 60 * 60 + min * 60 + sec); return(CreateResult(GetTimeSerialNumber(secondsOfThisTime), DataType.Time)); }
public void ParseShouldThrowExceptionIfSecondIsOutOfRange() { var parser = new TimeStringParser(); var result = parser.Parse("10:12:60"); }
public void ParseShouldThrowExceptionIfMinuteIsOutOfRange() { var parser = new TimeStringParser(); var result = parser.Parse("10:60:55"); }
public void ParseShouldIdentifyPatternAndReturnCorrectResult() { var parser = new TimeStringParser(); var result = parser.Parse("10:12:55"); Assert.AreEqual(GetSerialNumber(10, 12, 55), result); }