protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            PValueAdjustmentUserBasedInputsModel model = (PValueAdjustmentUserBasedInputsModel)validationContext.ObjectInstance;

            if (String.IsNullOrEmpty(model.PValues))
            {
                return(new ValidationResult("P values have not been set"));
            }
            else //check to ensure that values in list are all numbers and are all comma separated and >0
            {
                string[] pValues = model.PValues.Replace(" ", "").Split(','); //split list by comma

                foreach (string p in pValues)                                                      //go through list and check that is a number and is greater than 0
                {
                    if (!Double.TryParse(p, out double number) && p != "<0.001" && p != "<0.0001") //n.b. remove < sign when checking
                    {
                        return(new ValidationResult("P values contains non-numeric values detected or values are not comma separated."));
                    }
                    else if (number < 0)
                    {
                        return(new ValidationResult("All p-values must be greater than zero"));
                    }
                    else if (number > 1)
                    {
                        return(new ValidationResult("All p-values must be less than 1."));
                    }
                }

                return(ValidationResult.Success);
            }
        }
Exemple #2
0
        public async Task PVA18()
        {
            string testName = "PVA18";

            //Arrange
            HttpClient client = _factory.CreateClient();

            PValueAdjustmentUserBasedInputsModel model = new PValueAdjustmentUserBasedInputsModel();

            model.PValues      = "<0.001,0.4";
            model.SelectedTest = "Hochberg";
            model.Significance = "0.10";

            //Act
            HttpResponseMessage response = await client.PostAsync("Analyses/PValueAdjustmentUserBasedInputs", new FormUrlEncodedContent(model.ToKeyValue()));

            IEnumerable <string> warnings = await Helpers.ExtractWarnings(response);

            //Assert
            Assert.Contains("You have entered unadjusted p-value(s) of the form <0.001. For the purposes of the numerical calculations this value has been replaced with 0.00099 and hence the adjusted p-values may be unduly conservative.", warnings);
            Helpers.SaveOutput("PValueAdjustmentUserBasedInputs", testName, warnings);

            //Act - ignore warnings
            var modelIgnoreWarnings = model.ToKeyValue();

            modelIgnoreWarnings.Add("ignoreWarnings", "true");
            StatsOutput statsOutput = await Helpers.SubmitAnalysis(client, "PValueAdjustmentUserBasedInputs", new FormUrlEncodedContent(modelIgnoreWarnings));

            Helpers.SaveTestOutput("PValueAdjustmentUserBasedInputs", model, testName, statsOutput);

            //Assert
            string expectedHtml = File.ReadAllText(Path.Combine("ExpectedResults", "PValueAdjustmentUserBasedInputs", testName + ".html"));

            Assert.Equal(Helpers.RemoveAllImageNodes(expectedHtml), Helpers.RemoveAllImageNodes(statsOutput.HtmlResults));
        }
Exemple #3
0
        public void LoadArguments_ReturnsCorrectArguments()
        {
            //Arrange
            System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            PValueAdjustmentUserBasedInputsModel sut = new PValueAdjustmentUserBasedInputsModel();

            List <Argument> arguments = new List <Argument>();

            arguments.Add(new Argument {
                Name = "SelectedTest", Value = "Hochberg"
            });
            arguments.Add(new Argument {
                Name = "Significance", Value = "0.01"
            });
            arguments.Add(new Argument {
                Name = "PValues", Value = "0.01,0.01,0.5"
            });

            Assert.Equal(3, arguments.Count);

            //Act
            sut.LoadArguments(arguments);

            //Assert
            Assert.Equal("Hochberg", sut.SelectedTest);
            Assert.Equal("0.01", sut.Significance);
            Assert.Equal("0.01,0.01,0.5", sut.PValues);
        }
Exemple #4
0
        private PValueAdjustmentUserBasedInputsModel GetModel()
        {
            var model = new PValueAdjustmentUserBasedInputsModel
            {
                SelectedTest = "Hochberg",
                Significance = "0.01",
                PValues      = "0.01,0.01,0.5"
            };

            return(model);
        }
Exemple #5
0
        public void ScriptFileName_ReturnsCorrectString()
        {
            //Arrange
            System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            PValueAdjustmentUserBasedInputsModel sut = new PValueAdjustmentUserBasedInputsModel();

            //Act
            string result = sut.ScriptFileName;

            //Assert
            Assert.Equal("PValueAdjustmentUserBasedInputs", result);
        }
Exemple #6
0
        public void GetCommandLineArguments_ReturnsCorrectString()
        {
            //Arrange
            System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            PValueAdjustmentUserBasedInputsModel sut = GetModel();

            //Act
            string result = sut.GetCommandLineArguments();

            //Assert
            Assert.Equal("0.01,0.01,0.5 Hochberg 0.01", result);
        }
Exemple #7
0
        public void MultipleComparisonTestsList_ReturnsCorrectList()
        {
            //Arrange
            System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            PValueAdjustmentUserBasedInputsModel sut = new PValueAdjustmentUserBasedInputsModel();

            //Act
            IEnumerable <string> result = sut.MultipleComparisonTests;

            //Assert
            Assert.IsAssignableFrom <IEnumerable <string> >(result);
            Assert.Equal(new List <string>()
            {
                "Holm", "Hochberg", "Hommel", "Benjamini-Hochberg", "Bonferroni"
            }, result);
        }
Exemple #8
0
        public void SignificancesList_ReturnsCorrectList()
        {
            //Arrange
            System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            PValueAdjustmentUserBasedInputsModel sut = new PValueAdjustmentUserBasedInputsModel();

            //Act
            IEnumerable <string> result = sut.SignificancesList;

            //Assert
            Assert.IsAssignableFrom <IEnumerable <string> >(result);
            Assert.Equal(new List <string>()
            {
                "0.1", "0.05", "0.01", "0.001"
            }, result);
        }
Exemple #9
0
        public async Task PVA4()
        {
            string testName = "PVA4";

            //Arrange
            HttpClient client = _factory.CreateClient();

            PValueAdjustmentUserBasedInputsModel model = new PValueAdjustmentUserBasedInputsModel();

            model.PValues      = "<0.0001,0.02";
            model.SelectedTest = "Holm";

            //Act
            HttpResponseMessage response = await client.PostAsync("Analyses/PValueAdjustmentUserBasedInputs", new FormUrlEncodedContent(model.ToKeyValue()));

            IEnumerable <string> warnings = await Helpers.ExtractWarnings(response);

            //Assert
            Assert.Contains("You have entered unadjusted p-value(s) of the form <0.0001. For the purposes of the numerical calculations this value has been replaced with 0.000099 and hence the adjusted p-values may be unduly conservative.", warnings);
            Helpers.SaveOutput("PValueAdjustmentUserBasedInputs", testName, warnings);
        }
Exemple #10
0
        public async Task PVA2()
        {
            string testName = "PVA2";

            //Arrange
            HttpClient client = _factory.CreateClient();

            PValueAdjustmentUserBasedInputsModel model = new PValueAdjustmentUserBasedInputsModel();

            model.PValues      = "0.01 0.02 1.2";
            model.SelectedTest = "Holm";

            //Act
            HttpResponseMessage response = await client.PostAsync("Analyses/PValueAdjustmentUserBasedInputs", new FormUrlEncodedContent(model.ToKeyValue()));

            IEnumerable <string> errors = await Helpers.ExtractErrors(response);

            //Assert
            Assert.Contains("P values contains non-numeric values detected or values are not comma separated.", errors);
            Helpers.SaveOutput("PValueAdjustmentUserBasedInputs", testName, errors);
        }
Exemple #11
0
        public async Task PVA8()
        {
            string testName = "PVA8";

            //Arrange
            HttpClient client = _factory.CreateClient();

            PValueAdjustmentUserBasedInputsModel model = new PValueAdjustmentUserBasedInputsModel();

            model.PValues      = "0.06,0.1,0.2";
            model.SelectedTest = "Holm";

            //Act
            StatsOutput statsOutput = await Helpers.SubmitAnalysis(client, "PValueAdjustmentUserBasedInputs", new FormUrlEncodedContent(model.ToKeyValue()));

            Helpers.SaveTestOutput("PValueAdjustmentUserBasedInputs", model, testName, statsOutput);

            //Assert
            string expectedHtml = File.ReadAllText(Path.Combine("ExpectedResults", "PValueAdjustmentUserBasedInputs", testName + ".html"));

            Assert.Equal(Helpers.RemoveAllImageNodes(expectedHtml), Helpers.RemoveAllImageNodes(statsOutput.HtmlResults));
        }
Exemple #12
0
        public void GetArguments_ReturnsCorrectArguments()
        {
            //Arrange
            System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            PValueAdjustmentUserBasedInputsModel sut = GetModel();

            //Act
            List <Argument> result = sut.GetArguments().ToList();

            //Assert
            var selectedTest = result.Single(x => x.Name == "SelectedTest");

            Assert.Equal("Hochberg", selectedTest.Value);

            var significance = result.Single(x => x.Name == "Significance");

            Assert.Equal("0.01", significance.Value);

            var pValues = result.Single(x => x.Name == "PValues");

            Assert.Equal("0.01,0.01,0.5", pValues.Value);
        }
Exemple #13
0
        public async Task PVA16()
        {
            string testName = "PVA16";

            //Arrange
            HttpClient client = _factory.CreateClient();

            PValueAdjustmentUserBasedInputsModel model = new PValueAdjustmentUserBasedInputsModel();

            model.PValues      = "0.001,0.002,0.003,0.004,0.4";
            model.SelectedTest = "Hochberg";
            model.Significance = "0.10";

            //Act
            StatsOutput statsOutput = await Helpers.SubmitAnalysis(client, "PValueAdjustmentUserBasedInputs", new FormUrlEncodedContent(model.ToKeyValue()));

            Helpers.SaveTestOutput("PValueAdjustmentUserBasedInputs", model, testName, statsOutput);

            //Assert
            string expectedHtml = File.ReadAllText(Path.Combine("ExpectedResults", "PValueAdjustmentUserBasedInputs", testName + ".html"));

            Assert.Equal(Helpers.FixForUnixOSs(expectedHtml), Helpers.FixForUnixOSs(statsOutput.HtmlResults));
        }
 public async Task <IActionResult> PValueAdjustmentUserBasedInputs(PValueAdjustmentUserBasedInputsModel model, bool ignoreWarnings)
 {
     return(await RunAnalysis(model, ignoreWarnings));
 }
Exemple #15
0
 public PValueAdjustmentUserBasedInputsValidator(PValueAdjustmentUserBasedInputsModel pv)
 {
     pvVariables = pv;
 }