CQRS.Tests.CQRS.EventSourcing.Sql.ReadOrderImplementationExperimentTests.GetSortOrdersBetween C# (CSharp) Method

GetSortOrdersBetween() private method

private GetSortOrdersBetween ( SqlDecimal before, SqlDecimal after, long eventsToInsert ) : IEnumerable
before System.Data.SqlTypes.SqlDecimal
after System.Data.SqlTypes.SqlDecimal
eventsToInsert long
return IEnumerable
        private IEnumerable<SqlDecimal> GetSortOrdersBetween(SqlDecimal before, SqlDecimal after, long eventsToInsert)
        {
            before = SqlDecimal.ConvertToPrecScale(before, 38, 19);//Unless we convert to the correct precision we will not be able to use the full resolution
            after = SqlDecimal.ConvertToPrecScale(after, 38, 19);
            var diff = after - before;
            var increment = diff / (eventsToInsert + 1);
            if(increment == 0)
            {
                throw new Exception("Resolution Failure 1");
            }
            var previousSortOrder = before;
            long insertedEvents = 0;

            for(var sortOrder = before + increment; sortOrder < after && insertedEvents < eventsToInsert; sortOrder += increment, insertedEvents++)
            {
                yield return sortOrder;
                if(sortOrder == previousSortOrder)
                {
                    throw new Exception("Resolution failure 2");
                }
                previousSortOrder = sortOrder;
            }

            if(insertedEvents != eventsToInsert)
            {
                throw new Exception($"Should have generated {eventsToInsert} values but generated {insertedEvents} values.");
            }
        }        
    }