コード例 #1
0
        public ActionResult Index()
        {
            var permissions = Scientist.Science <IEnumerable <Permission> >("Permissions", experiment =>
            {
                experiment.Compare((x, y) => x.SequenceEqual(y));
                experiment.Use(() => db.GetApplicationPermissionsV1().ToList());
                experiment.Try(() => db.GetApplicationPermissionsV3().ToList());
            });

            return(View(permissions));
        }
コード例 #2
0
        public void AllowsReturningNullFromControlOrTest()
        {
            var result = Scientist.Science <object>("failure", experiment =>
            {
                experiment.Use(() => null);
                experiment.Try(() => null);
            });

            Assert.Null(result);
            Assert.True(TestHelper.Observation.First(m => m.Name == "failure").Success);
        }
コード例 #3
0
 public void AddScientist(Scientist s)
 {
     if (Db.Query <Scientist> ("Select * from Scientist where id = " + s.Id).Count > 0)
     {
         Db.Update(s);
     }
     else
     {
         Db.Insert(s);
     }
 }
コード例 #4
0
    public async Task PublishesAsynchronously()
    {
        const int expectedResult     = 42;
        var       pendingPublishTask = new TaskCompletionSource <object>();

        // Create a new publisher that will delay all
        // publishing to account for this test.
        var innerPublisher = Substitute.For <IResultPublisher>();

        innerPublisher.Publish(Arg.Any <Result <int, int> >())
        .Returns(call => pendingPublishTask.Task);

        var fireAndForgetPublisher = new FireAndForgetResultPublisher(innerPublisher, ex => { });

        var mock = Substitute.For <IControlCandidate <int, string> >();

        mock.Control().Returns(expectedResult);
        mock.Candidate().Returns(expectedResult);

        const int count = 10;

        using (Swap.Publisher(fireAndForgetPublisher))
        {
            Parallel.ForEach(
                Enumerable.Repeat(0, count),
                src =>
            {
                var result = Scientist.Science <int>("myExperiment", experiment =>
                {
                    experiment.Use(mock.Control);
                    experiment.Try(mock.Candidate);
                });

                Assert.Equal(expectedResult, result);
            });
        }

        // Make sure that the above science calls are still publishing.
        Task whenPublished = fireAndForgetPublisher.WhenPublished();

        Assert.NotNull(whenPublished);

        // Ensure that the mock was called before the when published task has completed.
        mock.Received(count).Control();
        mock.Received(count).Candidate();

        Assert.False(whenPublished.IsCompleted, "When Published Task completed early.");

        pendingPublishTask.SetResult(null);

        await whenPublished;

        Assert.True(whenPublished.IsCompleted, "When Published Task isn't complete.");
    }
コード例 #5
0
        public static bool IsMeme(string phrase)
        {
            return(Scientist.Science <bool>("adding-context-example", experiment => {
                // If you add context here...
                experiment.AddContext("phrase", phrase);
                experiment.AddContext("when", DateTimeOffset.Now);

                experiment.Use(() => MemeBot2000.IsMeme(phrase)); // Control
                experiment.Try(() => MemeBot3000.IsMeme(phrase)); // Candidate
            }));
        }
コード例 #6
0
        public async Task <IActionResult> PostScientist([FromBody] Scientist scientist)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _context.Scientist.Add(scientist);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetScientist", new { id = scientist.Id }, scientist));
        }
コード例 #7
0
        public void AllowsReturningNullFromControlOrTest()
        {
            const string experimentName = nameof(AllowsReturningNullFromControlOrTest);
            var          result         = Scientist.Science <object>(experimentName, experiment =>
            {
                experiment.Use(() => null);
                experiment.Try("candidate", () => null);
            });

            Assert.Null(result);
            Assert.True(TestHelper.Results <object>(experimentName).First().Matched);
        }
コード例 #8
0
 public void ResetFields()
 {
     if (FieldsAreNull())
     {
         InitializeFields();
     }
     name.Text = "";
     desc.Text = "";
     image.SetImageResource(Resource.Drawable.placeholder);
     s = null;
     //ImageService.LoadFile(animalAndroid.Uri).DownSample(image.Width, image.Height).Into(image);
 }
コード例 #9
0
        private static int GetResultWithScientist(int randomInput)
        {
            int result = Scientist.Science <int>("First experiment", experiment =>
            {
                experiment.AddContext("Random Data", randomInput);

                experiment.Use(() => new ComplicatedCalc_V1().GetResult(randomInput)); // Old Version
                experiment.Try(() => new ComplicatedCalc_V2().GetResult(randomInput)); // New Version
            });

            return(result);
        }
コード例 #10
0
        public static bool IsMeme(string phrase)
        {
            // Runs and returns the control
            // Runs the experiment as well (but does not return it)

            // Note! This doesn't actually output or record anything about the experiment.
            // To see how that's done, look at 02-RecordingResultsExample.cs.
            return(Scientist.Science <bool>("basic-example", experiment => {
                experiment.Use(() => MemeBot2000.IsMeme(phrase)); // Control
                experiment.Try(() => MemeBot3000.IsMeme(phrase)); // Candidate
            }));
        }
コード例 #11
0
        public void NoCandidateMeansNoPublish()
        {
            const string experimentName = "noCandidateNoPublish";

            var result = Scientist.Science <int>(experimentName, experiment =>
            {
                experiment.Use(() => 42);
            });

            // verify that no results were published for this experiment
            Assert.Empty(TestHelper.Results <int>(experimentName));
        }
コード例 #12
0
        public InventoryResult Post([FromBody] Inventory value)
        {
            Scientist.ResultPublisher = new MyResultPublisher();

            return(Scientist.Science <InventoryResult>("VatIsCorrect", experiment =>
            {
                experiment.Compare((x, y) => x.TotalPrice == y.TotalPrice);


                experiment.Use(() => _vatService.Result(value));     // old way
                experiment.Try(() => _vatService.NewResults(value)); // new way
            }));
        }
コード例 #13
0
        public static bool IsMeme(string phrase)
        {
            return(Scientist.Science <bool>("sampling-example", experiment => {
                experiment.AddContext("phrase", phrase);
                experiment.AddContext("when", DateTimeOffset.Now);

                // Let's say we only want to run the experiment 50% of the time
                experiment.RunIf(() => rng.Next(10) < 5);

                experiment.Use(() => MemeBot2000.IsMeme(phrase)); // Control
                experiment.Try(() => MemeBot3000.IsMeme(phrase)); // Candidate
            }));
        }
コード例 #14
0
        public static bool IsMeme(string phrase)
        {
            return(Scientist.Science <bool>("conditional-example", experiment => {
                experiment.AddContext("phrase", phrase);
                experiment.AddContext("when", DateTimeOffset.Now);

                // Let's say we only want to run the experiment if people are excited.
                // This means the experiment will only run when the phrase ends with an bang (!)
                experiment.RunIf(() => !string.IsNullOrWhiteSpace(phrase) && phrase.EndsWith('!'));

                experiment.Use(() => MemeBot2000.IsMeme(phrase)); // Control
                experiment.Try(() => MemeBot3000.IsMeme(phrase)); // Candidate
            }));
        }
コード例 #15
0
        // GET: Scientists/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Scientist scientist = db.Scientists.Find(id);

            if (scientist == null)
            {
                return(HttpNotFound());
            }
            return(View(scientist));
        }
コード例 #16
0
        public void Post_Creates_New_Scientist()
        {
            var newScientist  = new Scientist(1, "New scientist");
            var scientistList = new List <Scientist>();

            scientistRepo.When(t => t.Create(newScientist))
            .Do(t => scientistList.Add(newScientist));

            scientistRepo.GetAll().Returns(scientistList);

            var result = underTest.Post(newScientist);

            Assert.Contains(newScientist, result);
        }
コード例 #17
0
        public void NoCandidateMeansRunIfIsNeverRun()
        {
            var mock = Substitute.For <IControlCandidate <int> >();

            mock.RunIf().Returns(false);

            Scientist.Science <int, int>("noCandidateNoRunIf", experiment =>
            {
                experiment.Use(() => 42);
                experiment.RunIf(mock.RunIf);
            });

            mock.DidNotReceive().RunIf();
        }
コード例 #18
0
        public void NoCandidateMeansCleanIsNeverRun()
        {
            var mock = Substitute.For <IControlCandidate <int, int> >();

            mock.Clean(Arg.Any <int>()).Returns(0);

            Scientist.Science <int, int>("noCandidateNoClean", experiment =>
            {
                experiment.Use(() => 42);
                experiment.Clean(mock.Clean);
            });

            mock.DidNotReceive().Clean(Arg.Any <int>());
        }
コード例 #19
0
        public void GetAnimalData()
        {
            uri       = animalAndroid.Uri;
            id        = animalAndroid.id;
            name.Text = animalAndroid.name;
            desc.Text = animalAndroid.desc;
            ImageService.LoadFile(animalAndroid.Uri).DownSample(100, 100).Into(image);
            var listaNombres = DataManager.Instance.GetScientistNames(id);
            var adapter      = new ArrayAdapter <String> (this.Activity, Resource.Layout.support_simple_spinner_dropdown_item, listaNombres);

            listaScient = DataManager.Instance.GetScientist(animalAndroid.id);
            var listaNames = DataManager.Instance.GetScientistNamesFromAnimal(animalAndroid.id);

            s = null;
        }
コード例 #20
0
        public IEnumerable <DataWithSomeSensitiveStuff> Get()
        {
            return(Scientist.Science <
                       IEnumerable <DataWithSomeSensitiveStuff>,
                       IEnumerable <DataWithSomeSensitiveStuff> >(
                       "sensitive-stuff", experiment =>
            {
                experiment.Compare(CompareOriginalAndNewResults);
                experiment.AddContext("request id", Guid.NewGuid());

                experiment.Use(OriginalGetStuff);
                experiment.Try(NewGetStuff);

                experiment.Clean(dirty => dirty.Select(SanitiseForReporting));
            }));
        }
コード例 #21
0
        public async Task OnPost()
        {
            HasResult = true;
            Position  = FibonacciInput.Position;

            Result = await Scientist.ScienceAsync <int>("fibonacci-implementation", experiment =>
            {
                experiment.Use(async() => await _recursiveFibonacciCalculator.CalculateAsync(Position));
                experiment.Try(async() => await _linearFibonacciCalculator.CalculateAsync(Position));

                experiment.AddContext("Position", Position);
            });

            LastResults    = _experimentResultsGetter.LastResults;
            OverallResults = _experimentResultsGetter.OverallResults;
        }
コード例 #22
0
        public void NoCandidateMeansNoDisable()
        {
            var settings = Substitute.For <IScientistSettings>();

            settings.Enabled().Returns(Task.FromResult(false));

            using (Swap.Enabled(settings.Enabled))
            {
                Scientist.Science <int>("noCandidateNoDisable", experiment =>
                {
                    experiment.Use(() => 42);
                });

                settings.DidNotReceive().Enabled();
            }
        }
コード例 #23
0
        static void Main(string[] args)
        {
            //Example for dictionary:
            Project p0 = new Project("C#", 100000);
            Project p1 = new Project("Bitcoins", 5000000);
            var     s0 = new Scientist("Vera", "Musterfrau", 60000, "Dr");

            s0.Projects.Add(p0);
            s0.Projects.Add(p1);

            var projectEmployees = new List <Employee>
            {
                new ExternalLecturer("Peter", "Müller", 40000),
                new Assistant("Hans", "Hansen", 30000, 40, p0),
                s0
            };

            var dict = GetProjectEmployees(projectEmployees);

            //Print those employees working on project "C#":
            var cSharpEmployees = dict[p0];

            Console.WriteLine("Employees on the C# project:");

            foreach (Employee e in cSharpEmployees)
            {
                Console.WriteLine(e);
            }

            //Example for withdrawing money:
            Project      testProject = new Project("C#", 100000);
            ProjectStaff a           = new ProjectStaff("Fritz", "Müller", 20000, testProject);

            testProject.WithdrawMoney(10000, a);

            //Example for ITeach interface:
            List <ITeach> teachers = new List <ITeach>
            {
                new Scientist("Hans", "Petersen", 40000, "Dr"),
                new ExternalLecturer("Günther", "Hansen", 30000)
            };

            foreach (ITeach teacher in teachers)
            {
                teacher.Teaching(); //Polymorphism
            }
        }
コード例 #24
0
 public static void RemoveScientist(Conference conference, Scientist scientist)
 {
     try
     {
         using (ApplicationContext db = new ApplicationContext())
         {
             Conference          con = (from c in db.Conferences where c.Id == conference.Id select c).Include(c => c.ScientistConference).First();
             ScientistConference sco = con.ScientistConference.First(sc => sc.ScientistId == scientist.Id);
             con.ScientistConference.Remove(sco);
             db.SaveChanges();
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
 }
コード例 #25
0
 public static void RemoveScientist(Organization organization, Scientist scientist)
 {
     try
     {
         using (ApplicationContext db = new ApplicationContext())
         {
             Organization          org = (from o in db.Organizations where o.Id == organization.Id select o).Include(o => o.ScientistOrganization).First();
             ScientistOrganization so  = org.ScientistOrganization.First(so => so.ScientistId == scientist.Id);
             org.ScientistOrganization.Remove(so);
             db.SaveChanges();
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
 }
コード例 #26
0
        public async Task RunsBothBranchesOfSimpleAsynchronousExperimentAndReportsFailure()
        {
            const string experimentName = nameof(RunsBothBranchesOfSimpleAsynchronousExperimentAndReportsFailure);

            var resultPublisher = new InMemoryResultPublisher();
            var science         = new Scientist(resultPublisher);

            var result = await science.ExperimentAsync <int>(experimentName, experiment =>
            {
                experiment.Use(() => Task.FromResult(42));
                experiment.Try(() => Task.FromResult(37));
            });

            Assert.Equal(42, result);
            Assert.False(resultPublisher.Results <int>(experimentName).First().Matched);
            Assert.True(resultPublisher.Results <int>(experimentName).First().Mismatched);
        }
コード例 #27
0
        public ActionResult Edit([Bind(Include = "ID,Name,Title,Department,Mail,Phone,City,ImgName")] Scientist scientist, HttpPostedFileBase imgname)
        {
            if (ModelState.IsValid)
            {
                UpdateModel(scientist);
                if (imgname != null && imgname.ContentLength > 0)
                {
                    scientist.ImgName = imgname.FileName;
                    imgname.SaveAs(HttpContext.Server.MapPath("~/Images/") + scientist.ImgName);
                }

                db.Entry(scientist).State = EntityState.Modified;
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            return(View(scientist));
        }
コード例 #28
0
        public void RunsBeforeRun()
        {
            var mock = Substitute.For <IControlCandidate <int> >();

            mock.Control().Returns(42);
            mock.Candidate().Returns(42);
            const string experimentName = nameof(RunsBeforeRun);

            var result = Scientist.Science <int>(experimentName, experiment =>
            {
                experiment.BeforeRun(mock.BeforeRun);
                experiment.Use(mock.Control);
                experiment.Try("candidate", mock.Candidate);
            });

            Assert.Equal(42, result);
            mock.Received().BeforeRun();
        }
コード例 #29
0
        public void NoCandidateStillRunsControl()
        {
            const int expectedResult = 42;

            var mock = Substitute.For <IControlCandidate <int> >();

            mock.Control().Returns(expectedResult);

            const string experimentName = "noCandidate";

            var result = Scientist.Science <int>(experimentName, experiment =>
            {
                experiment.Use(mock.Control);
            });

            Assert.Equal(expectedResult, result);
            mock.Received().Control();
        }
コード例 #30
0
 public static void AddScientist(Conference conference, Scientist scientist)
 {
     try
     {
         using (ApplicationContext db = new ApplicationContext())
         {
             Conference con = (from c in db.Conferences where c.Id == conference.Id select c).First();
             con.ScientistConference.Add(new ScientistConference {
                 ConferenceId = conference.Id, ScientistId = scientist.Id
             });
             db.SaveChanges();
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
 }
コード例 #31
0
ファイル: Scientist.cs プロジェクト: g-zhang/Insect-Science
 void Awake()
 {
     S = this;
     currHP = MaxHP;
 }