コード例 #1
0
 public async Task BiExistsTest()
 {
     Assert.True(await OptionAsync <int> .Some(1).BiExists(i => i == 1, () => false));
     Assert.False(await OptionAsync <int> .Some(1).BiExists(i => i != 1, () => true));
     Assert.False(await OptionAsync <int> .None.BiExists(i => i == 1, () => false));
     Assert.True(await OptionAsync <int> .None.BiExists(i => i != 1, () => true));
 }
コード例 #2
0
        public static async Task UnwrapSomeAsync_GivenSomeInput_ReturnsCorrectSomeValue()
        {
            const string expected = "expected";
            var          option   = OptionAsync <string> .Some(expected);

            var unwrapped = await option.UnwrapSomeAsync().ConfigureAwait(false);

            Assert.That(unwrapped, Is.EqualTo(expected));
        }
コード例 #3
0
        public async void TaskSomeIsSomeTask()
        {
            var ma = OptionAsync <int> .Some(123).AsTask();

            var mb = ma.Sequence();
            var mc = OptionAsync <Task <int> > .Some(123.AsTask());

            var mr = await(mb == mc);

            Assert.True(mr);
        }
コード例 #4
0
        /// <summary>
        /// Retrieves a database view, if available.
        /// </summary>
        /// <param name="viewName">A view name.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>A view definition, if available.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="viewName"/> is <c>null</c>.</exception>
        protected virtual OptionAsync <IDatabaseView> LoadView(Type viewType)
        {
            if (viewType == null)
            {
                throw new ArgumentNullException(nameof(viewType));
            }

            // TODO: check whether this even exists...
            var view = new ReflectionView(this, Dialect, viewType);

            return(OptionAsync <IDatabaseView> .Some(view));
        }
コード例 #5
0
        protected virtual OptionAsync <IDatabaseSequence> LoadSequence(Type sequenceType)
        {
            if (sequenceType == null)
            {
                throw new ArgumentNullException(nameof(sequenceType));
            }

            // TODO: check whether this even exists...
            var sequence = new ReflectionSequence(this, Dialect, sequenceType);

            return(OptionAsync <IDatabaseSequence> .Some(sequence));
        }
コード例 #6
0
        /// <summary>
        /// Retrieves a table from the database, if available.
        /// </summary>
        /// <param name="tableName">A table name.</param>
        /// <param name="queryCache">The query cache.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>A table, if available.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="tableName"/> is <c>null</c>.</exception>
        protected virtual OptionAsync <IRelationalDatabaseTable> LoadTable(Type tableType)
        {
            if (tableType == null)
            {
                throw new ArgumentNullException(nameof(tableType));
            }

            // TODO: check whether this even exists...
            var table = new ReflectionTable(this, Dialect, tableType);

            return(OptionAsync <IRelationalDatabaseTable> .Some(table));
        }
コード例 #7
0
        public async Task MapTest()
        {
            var x = OptionAsync <int> .Some(1);

            Assert.True(await x.Select(i => i * 2).Exists(j => j == 2));
            Assert.True(await x.Map(i => i * 2).Exists(j => j == 2));

            var y = OptionAsync <int> .None;

            Assert.False(await y.Select(i => 2).Exists(j => j == 2));
            Assert.False(await y.Map(i => 2).Exists(j => j == 2));
        }
コード例 #8
0
        public async Task BindTest()
        {
            var x = OptionAsync <int> .Some(1);

            Assert.True(await x.SelectMany(i => SomeAsync(i * 2), (i, j) => j).Exists(j => j == 2));
            Assert.True(await x.Bind(i => SomeAsync(i * 2)).Exists(j => j == 2));

            var y = OptionAsync <int> .None;

            Assert.False(await y.SelectMany(i => SomeAsync(2), (i, j) => j).Exists(j => true));
            Assert.False(await y.Bind(i => SomeAsync(2)).Exists(j => true));
        }
コード例 #9
0
        protected virtual OptionAsync <IDatabaseSynonym> LoadSynonym(Type synonymType)
        {
            if (synonymType == null)
            {
                throw new ArgumentNullException(nameof(synonymType));
            }

            // TODO: check whether this even exists...
            var synonym = new ReflectionSynonym(this, Dialect, synonymType);

            return(OptionAsync <IDatabaseSynonym> .Some(synonym));
        }
コード例 #10
0
        public OptionAsync <IDatabaseView> GetView(Identifier viewName, CancellationToken cancellationToken = default)
        {
            if (viewName == null)
            {
                throw new ArgumentNullException(nameof(viewName));
            }

            viewName = CreateQualifiedIdentifier(viewName);

            return(View.TryGetValue(viewName, out var view)
                ? OptionAsync <IDatabaseView> .Some(view)
                : OptionAsync <IDatabaseView> .None);
        }
コード例 #11
0
        public OptionAsync <IDatabaseSequence> GetSequence(Identifier sequenceName, CancellationToken cancellationToken = default)
        {
            if (sequenceName == null)
            {
                throw new ArgumentNullException(nameof(sequenceName));
            }

            sequenceName = CreateQualifiedIdentifier(sequenceName);

            return(Sequence.TryGetValue(sequenceName, out var sequence)
                ? OptionAsync <IDatabaseSequence> .Some(sequence)
                : OptionAsync <IDatabaseSequence> .None);
        }
コード例 #12
0
        public OptionAsync <IDatabaseSynonym> GetSynonym(Identifier synonymName, CancellationToken cancellationToken = default)
        {
            if (synonymName == null)
            {
                throw new ArgumentNullException(nameof(synonymName));
            }

            synonymName = CreateQualifiedIdentifier(synonymName);

            return(Synonym.TryGetValue(synonymName, out var synonym)
                ? OptionAsync <IDatabaseSynonym> .Some(synonym)
                : OptionAsync <IDatabaseSynonym> .None);
        }
コード例 #13
0
        public OptionAsync <IRelationalDatabaseTable> GetTable(Identifier tableName, CancellationToken cancellationToken = default)
        {
            if (tableName == null)
            {
                throw new ArgumentNullException(nameof(tableName));
            }

            tableName = CreateQualifiedIdentifier(tableName);

            return(Table.TryGetValue(tableName, out var table)
                ? OptionAsync <IRelationalDatabaseTable> .Some(table)
                : OptionAsync <IRelationalDatabaseTable> .None);
        }
コード例 #14
0
        public OptionAsync <IDatabaseRoutine> GetRoutine(Identifier routineName, CancellationToken cancellationToken = default)
        {
            if (routineName == null)
            {
                throw new ArgumentNullException(nameof(routineName));
            }

            routineName = CreateQualifiedIdentifier(routineName);

            return(Routine.TryGetValue(routineName, out var routine)
                ? OptionAsync <IDatabaseRoutine> .Some(routine)
                : OptionAsync <IDatabaseRoutine> .None);
        }
コード例 #15
0
        public async Task FilterTest()
        {
            Assert.True(await OptionAsync <int> .Some(1).Filter(i => i == 1).IsSome);
            Assert.True(await OptionAsync <int> .Some(1).FilterAsync(i => Task.FromResult(i == 1)).IsSome);
            Assert.False(await OptionAsync <int> .Some(2).Filter(i => i == 1).IsSome);
            Assert.False(await OptionAsync <int> .Some(2).FilterAsync(i => Task.FromResult(i == 1)).IsSome);
            Assert.False(await OptionAsync <int> .None.Filter(i => true).IsSome);
            Assert.False(await OptionAsync <int> .None.FilterAsync(i => Task.FromResult(true)).IsSome);

            Assert.True(await OptionAsync <int> .Some(1).Where(i => i == 1).IsSome);
            Assert.False(await OptionAsync <int> .Some(2).Where(i => i == 1).IsSome);
            Assert.False(await OptionAsync <int> .None.Where(i => true).IsSome);
        }
コード例 #16
0
 public async Task <OptionAsync <Payment> > GetByMerchantReferenceAsync(MerchantId merchantId, Option <MerchantReference> merchantReference)
 {
     return(await merchantReference.Match(async mr =>
     {
         Payment payment = Databag.Values.SingleOrDefault(p => p.MerchantReference == mr &&
                                                          p.MerchantId == merchantId);
         if (payment == null)
         {
             return await Task.FromResult(OptionAsync <Payment> .None);
         }
         return await Task.FromResult(OptionAsync <Payment> .Some(payment));
     },
                                          async() => await Task.FromResult(OptionAsync <Payment> .None)));
 }
コード例 #17
0
        public async Task <OptionAsync <Payment> > GetAsync(MerchantId merchantId, PaymentId paymentId)
        {
            if (!Databag.ContainsKey(paymentId))
            {
                return(OptionAsync <Payment> .None);
            }
            Payment payment = Databag[paymentId];

            if (payment.MerchantId != merchantId)
            {
                return(OptionAsync <Payment> .None);
            }
            return(await Task.FromResult(OptionAsync <Payment> .Some(payment)));
        }
コード例 #18
0
        public static async Task FirstSome_GivenAsyncInputWithSomes_ReturnsFirstSome()
        {
            const string expected = "test_1";
            var          input    = new[]
            {
                OptionAsync <string> .None,
                OptionAsync <string> .Some("test_1"),
                OptionAsync <string> .Some("test_2"),
                OptionAsync <string> .None
            };
            var result    = input.FirstSome();
            var unwrapped = await result.UnwrapSomeAsync().ConfigureAwait(false);

            Assert.That(unwrapped, Is.EqualTo(expected));
        }
コード例 #19
0
ファイル: OracleDialect.cs プロジェクト: fagan2888/Schematic
        private static async Task <IIdentifierDefaults> GetIdentifierDefaultsAsyncCore(ISchematicConnection connection, CancellationToken cancellationToken)
        {
            var hostInfoOption      = connection.DbConnection.QueryFirstOrNone <DatabaseHost>(IdentifierDefaultsQuerySql, cancellationToken);
            var qualifiedServerName = await hostInfoOption
                                      .Bind(dbHost => dbHost.ServerHost != null && dbHost.ServerSid != null
                                            ?OptionAsync <DatabaseHost> .Some(dbHost)
                                            : OptionAsync <DatabaseHost> .None
                                            )
                                      .MatchUnsafe(
                dbHost => dbHost.ServerHost + "/" + dbHost.ServerSid,
                () => (string?)null
                ).ConfigureAwait(false);

            var dbName = await hostInfoOption.MatchUnsafe(h => h.DatabaseName, () => null).ConfigureAwait(false);

            var defaultSchema = await hostInfoOption.MatchUnsafe(h => h.DefaultSchema, () => null).ConfigureAwait(false);

            return(new IdentifierDefaults(qualifiedServerName, dbName, defaultSchema));
        }
コード例 #20
0
 public async Task ExistsAsyncTest()
 {
     Assert.True(await OptionAsync <int> .Some(1).ExistsAsync(i => Task.FromResult(i == 1)));
     Assert.False(await OptionAsync <int> .None.ExistsAsync(i => Task.FromResult(true)));
 }
コード例 #21
0
 public async void SomeAsync_Pass() =>
 await Assert.SomeAsync(OptionAsync <string> .Some("1234"));
コード例 #22
0
 public async void SomeAsync_WithExpectation_Pass() =>
 await Assert.SomeAsync("1234", OptionAsync <string> .Some("1234"));
コード例 #23
0
 public async void Some_WithIncorrectExpectation_Fail() =>
 await Assert.ThrowsAsync <EqualException>(
     async() => await Assert.SomeAsync("1234", OptionAsync <string> .Some("5678")));
コード例 #24
0
 public OptionAsync <A> Some(A value) =>
 isnull(value)
         ? throw new ArgumentNullException(nameof(value))
         : OptionAsync <A> .Some(value);
コード例 #25
0
 public async void SomeAsync_WithCorrectAsserts_Pass() =>
 await Assert.SomeAsync(OptionAsync <int> .Some(1234), x => Assert.InRange(x, 1, 9999));
コード例 #26
0
 public async void NoneAsync_Fail() =>
 await Assert.ThrowsAsync <NoneException>(
     async() => await Assert.NoneAsync(OptionAsync <string> .Some("1234")));
コード例 #27
0
 public async void SomeAsync_WithIncorrectAsserts_Fail() =>
 await Assert.ThrowsAsync <InRangeException>(
     async() => await Assert.SomeAsync(OptionAsync <int> .Some(1234), x => Assert.InRange(x, 1, 999)));
コード例 #28
0
 public static OptionAsync <A> ToAsync <A>(this Option <A> self) =>
 self.IsSome ? OptionAsync <A> .Some(self.Value) : default;
コード例 #29
0
        // Not valuable any more
        //[Fact]
        //public async void SequenceFlip()
        //{
        //    Task<Option<int>> taskOpt = Task.Run(() => Some(10));

        //    Option<Task<int>> optTask = taskOpt.Sequence();
        //    var res = await optTask.IfNone(0.AsTask());
        //    Assert.True(res == 10);

        //    taskOpt = optTask.Sequence();
        //}

        private static OptionAsync <int> GetValue(bool select) =>
        select
                ? OptionAsync <int> .Some(1000)
                : OptionAsync <int> .None;