forked from Plant-Food-Research-Open/FieldNBalance
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFieldConfigTests.cs
86 lines (77 loc) · 3.78 KB
/
FieldConfigTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// FieldNBalance is a program that estimates the N balance and provides N fertilizer recommendations for cultivated crops.
// Author: Hamish Brown.
// Copyright (c) 2024 The New Zealand Institute for Plant and Food Research Limited
using System.Collections.Generic;
using SVSModel.Configuration;
using SVSModel.Models;
using Xunit;
using static SVSModel.Configuration.InputCategories;
namespace SVSModel.Tests.Configuration;
public class FieldConfigTests
{
private static readonly string WeatherStation = Defaults.WeatherStation;
private static readonly string SoilCategory = Defaults.SoilCategory;
private static readonly string Texture = Defaults.SoilTexture;
private static readonly double PMN = Defaults.PMN;
private static readonly int Splits = Defaults.Splits;
private static readonly double Rocks = 10;
private static readonly string SampleDepth = Defaults.SampleDepth;
private static readonly string PrePlantRain = Defaults.RainPrior;
private static readonly string InCropRain = Defaults.RainDuring;
private static readonly string Irrigation = Defaults.IrrigationApplied;
private readonly Dictionary<string, object> ExcelInputDict = new()
{
{ "WeatherStation", WeatherStation },
{ "SoilCategory", SoilCategory },
{ "Texture", Texture },
{ "PMN", PMN },
{ "Splits", Splits },
{ "Rocks", Rocks },
{ "SampleDepth", SampleDepth },
{ "PrePlantRain", PrePlantRain },
{ "InCropRain", InCropRain },
{ "Irrigation", Irrigation }
};
[Fact]
public void Test_FieldConfig_Excel_Gets_Values_Correctly()
{
var fieldConfig = new FieldConfig(ExcelInputDict);
Assert.Equal(fieldConfig.Rocks, Rocks / 100);
Assert.Equal(fieldConfig.SampleDepthFactor, Constants.SampleDepthFactor[SampleDepth]);
Assert.Equal(fieldConfig.BulkDensity, Constants.BulkDensity(SoilCategory, Texture));
Assert.Equal(fieldConfig.AWC, 3 * Constants.AWCPercent[Texture] * (1 - Rocks / 100));
Assert.Equal(fieldConfig.PrePlantRainFactor, Constants.PPRainFactors[PrePlantRain]);
Assert.Equal(fieldConfig.InCropRainFactor, Constants.ICRainFactors[InCropRain]);
Assert.Equal(fieldConfig.IrrigationTrigger, Constants.IrrigationTriggers[Irrigation]);
Assert.Equal(fieldConfig.IrrigationRefill, Constants.IrrigationRefill[Irrigation]);
}
[Fact]
public void Test_FieldConfig_Both_Constructors_Match()
{
var fieldConfig = new FieldConfig
{
Category = SoilCategory,
Texture = Texture,
PMN = PMN,
Splits = Splits,
_rawRocks = Rocks,
_sampleDepth = SampleDepth,
_prePlantRain = PrePlantRain,
_inCropRain = InCropRain,
_irrigation = Irrigation
};
var fieldConfigExcel = new FieldConfig(ExcelInputDict);
Assert.Equal(fieldConfig.Category, fieldConfigExcel.Category);
Assert.Equal(fieldConfig.Texture, fieldConfigExcel.Texture);
Assert.Equal(fieldConfig.Rocks, fieldConfigExcel.Rocks);
Assert.Equal(fieldConfig.SampleDepthFactor, fieldConfigExcel.SampleDepthFactor);
Assert.Equal(fieldConfig.BulkDensity, fieldConfigExcel.BulkDensity);
Assert.Equal(fieldConfig.PMN, fieldConfigExcel.PMN);
Assert.Equal(fieldConfig.Splits, fieldConfigExcel.Splits);
Assert.Equal(fieldConfig.AWC, fieldConfigExcel.AWC);
Assert.Equal(fieldConfig.PrePlantRainFactor, fieldConfigExcel.PrePlantRainFactor);
Assert.Equal(fieldConfig.InCropRainFactor, fieldConfigExcel.InCropRainFactor);
Assert.Equal(fieldConfig.IrrigationTrigger, fieldConfigExcel.IrrigationTrigger);
Assert.Equal(fieldConfig.IrrigationRefill, fieldConfigExcel.IrrigationRefill);
}
}