public void ReadStringMandatory()
        {
            JsonDocument jdoc = JsonDocument.Parse("{\"foo\":\"hello world\"}");

            // Test success case.
            string val = JsonReadMandatoryUtils.ReadStringMandatory(jdoc.RootElement, "foo");

            Assert.AreEqual("hello world", val);

            // Test missing mandatory.
            Assert.ThrowsException <Exception>(() => JsonReadMandatoryUtils.ReadStringMandatory(jdoc.RootElement, "bar"));
        }
    public void ReadBoolMandatory()
    {
        JsonDocument jdoc = JsonDocument.Parse("{\"foo\":true}");

        // Test success case.
        bool val = JsonReadMandatoryUtils.ReadBoolMandatory(jdoc.RootElement, "foo");

        Assert.True(val);

        // Test missing mandatory.
        Assert.Throws <Exception>(() => JsonReadMandatoryUtils.ReadBoolMandatory(jdoc.RootElement, "bar"));

        // Test invalid value.
        jdoc = JsonDocument.Parse("{\"foo\":\"'abc\"}");
        Assert.Throws <InvalidOperationException>(() => JsonReadMandatoryUtils.ReadBoolMandatory(jdoc.RootElement, "foo"));
    }
    public void ReadDoubleMandatory()
    {
        JsonDocument jdoc = JsonDocument.Parse("{\"foo\":1234.5}");

        // Test success case.
        double val = JsonReadMandatoryUtils.ReadDoubleMandatory(jdoc.RootElement, "foo");

        Assert.Equal(1234.5, val);

        // Test missing mandatory.
        Assert.Throws <Exception>(() => JsonReadMandatoryUtils.ReadDoubleMandatory(jdoc.RootElement, "bar"));

        // Test invalid value.
        jdoc = JsonDocument.Parse("{\"foo\":\"abc\"}");
        Assert.Throws <InvalidOperationException>(() => JsonReadMandatoryUtils.ReadDoubleMandatory(jdoc.RootElement, "foo"));
    }
        public void ReadDoubleMandatory()
        {
            JObject jobj = JObject.Parse("{'foo':'1234.5'}");

            // Test success case.
            double val = JsonReadMandatoryUtils.ReadDoubleMandatory(jobj, "foo");

            Assert.AreEqual(1234.5, val);

            // Test missing mandatory.
            Assert.ThrowsException <Exception>(() => JsonReadMandatoryUtils.ReadDoubleMandatory(jobj, "bar"));

            // Test invalid value.
            jobj = JObject.Parse("{'foo':'abc'}");
            Assert.ThrowsException <FormatException>(() => JsonReadMandatoryUtils.ReadDoubleMandatory(jobj, "foo"));
        }
        private static void ReadEvaluationSchemeConfig(
            JsonElement configElem,
            out int preyInitMoves,
            out float preySpeed,
            out float sensorRange,
            out int maxTimesteps,
            out int trialsPerEvaluation)
        {
            // Get the customEvaluationSchemeConfig section.
            if (!configElem.TryGetProperty("customEvaluationSchemeConfig", out JsonElement evalSchemeElem))
            {
                throw new Exception("customEvaluationSchemeConfig not defined.");
            }

            preyInitMoves       = JsonReadMandatoryUtils.ReadIntMandatory(evalSchemeElem, "preyInitMoves");
            preySpeed           = (float)JsonReadMandatoryUtils.ReadDoubleMandatory(evalSchemeElem, "preySpeed");
            sensorRange         = (float)JsonReadMandatoryUtils.ReadDoubleMandatory(evalSchemeElem, "sensorRange");
            maxTimesteps        = JsonReadMandatoryUtils.ReadIntMandatory(evalSchemeElem, "maxTimesteps");
            trialsPerEvaluation = JsonReadMandatoryUtils.ReadIntMandatory(evalSchemeElem, "trialsPerEvaluation");
        }