static void QueryCartesianProduct() { using (var even = new EvenNumberGenerator(10)) { using (var odd = new OddNumberGenerator(10)) { var evenObservable = Observable.FromEvent <int>( a => even.NumberGenerated += a, r => even.NumberGenerated -= r); var oddObservable = Observable.FromEvent <int> (a => odd.NumberGenerated += a, r => odd.NumberGenerated -= r); // Re-write this query to insert the side-effect // of printing every value of n3, i.e. the product of n1 and n2 // before the filter is applied on n3 var composition = from n1 in evenObservable from n2 in oddObservable let n3 = n1 * n2 where n3 < 50 select n3; var subscription = composition.Subscribe(Console.WriteLine); Console.WriteLine("Press any key to exit the program."); Console.ReadKey(); subscription.Dispose(); } } }
static void QueryZip() { using (var even = new EvenNumberGenerator(10)) { using (var odd = new OddNumberGenerator(10)) { var evenObservable = Observable.FromEvent <int>( a => even.NumberGenerated += a, r => even.NumberGenerated -= r); var oddObservable = Observable.FromEvent <int> (a => odd.NumberGenerated += a, r => odd.NumberGenerated -= r); var composition = evenObservable .Zip(oddObservable, (n1, n2) => n1 * n2) .Do(product => Console.WriteLine($"Product : {product}")) .Where(product => product < 50); var subscription = composition.Subscribe(Console.WriteLine); Console.WriteLine("Press any key to exit the program."); Console.ReadKey(); subscription.Dispose(); } } }
public void TestOddNumberGenerator() { const string expected = "1, 3, 5, 7, 9"; var generator = new OddNumberGenerator { Range = new Range0To10() }; var result = generator.GenerateOutput(); Assert.AreEqual(expected, result); }
public static int Generate(int min, int max, out int iterationCount) { int generatedNumber; bool isPrime; iterationCount = 0; do { generatedNumber = OddNumberGenerator.Generate(min, max); isPrime = PrimeNumChecker.IsPrime(generatedNumber); iterationCount++; }while (!isPrime); return(generatedNumber); }