-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWoodenFloor.cs
163 lines (127 loc) · 5.09 KB
/
WoodenFloor.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace PrimitiveTypes
{
[TestClass]
public class WoodenFloor
{
[TestMethod]
[TestCategory("10_Wooden_Floor")]
public void Compute_Boards_Needed_When_Ll_Input_Values_Are_Zero()
{
Size boardSize = new Size(0, 0);
Size roomSize = new Size(0, 0);
uint lossesPercentage = 0;
uint neededBoards = ComputeNeededBoards(roomSize, boardSize, lossesPercentage);
Assert.AreEqual<uint>(0, neededBoards);
}
[TestMethod]
[TestCategory("10_Wooden_Floor")]
public void Compute_Boards_Needed_When_Losses_Percentage_Is_Zero()
{
Size boardSize = new Size(300, 700);
Size roomSize = new Size(3000, 7000);
uint lossesPercentage = 0;
uint neededBoards = ComputeNeededBoards(roomSize, boardSize, lossesPercentage);
Assert.AreEqual<uint>(100, neededBoards);
}
[TestMethod]
[TestCategory("10_Wooden_Floor")]
public void Compute_Boards_Needed_When_BoardSide_Length_Or_Width_Is_Zero()
{
Size boardSize = new Size(0, 10);
Size roomSize = new Size(3000, 7000);
uint lossesPercentage = 15;
uint neededBoards = ComputeNeededBoards(roomSize, boardSize, lossesPercentage);
Assert.AreEqual<uint>(0, neededBoards);
}
[TestMethod]
[TestCategory("10_Wooden_Floor")]
public void Compute_Boards_Needed_When_RoomSide_Length_Or_Width_Is_Zero()
{
Size boardSize = new Size(300, 700);
Size roomSize = new Size(0, 7000);
uint lossesPercentage = 15;
uint neededBoards = ComputeNeededBoards(roomSize, boardSize, lossesPercentage);
Assert.AreEqual<uint>(0, neededBoards);
}
[TestMethod]
[TestCategory("10_Wooden_Floor")]
public void Compute_Boards_Needed_When_BoardSide_Length_Or_Width_Is_Smaller_ThanRoom_Size()
{
Size boardSize = new Size(300, 700);
Size roomSize = new Size(30, 70);
uint lossesPercentage = 15;
uint neededBoards = ComputeNeededBoards(roomSize, boardSize, lossesPercentage);
Assert.AreEqual<uint>(1, neededBoards);
}
[TestMethod]
[TestCategory("10_Wooden_Floor")]
public void Compute_Boards_Needed_When_BoardSide_Is_Exact_Multiple_For_Floor_Length_Or_Width() {
Size boardSize = new Size(300,700);
Size roomSize = new Size(3000, 7000);
uint lossesPercentage = 15;
uint neededBoards = ComputeNeededBoards(roomSize, boardSize, lossesPercentage);
Assert.AreEqual<uint>(115, neededBoards);
}
[TestMethod]
[TestCategory("10_Wooden_Floor")]
public void Compute_Boards_Needed_When_BoardSide_Is_Not_Exact_Multiple_For_Floor_Length_Or_Width() {
Size boardSize = new Size(300, 700);
Size roomSize = new Size(3100, 7100);
uint lossesPercentage = 15;
uint neededBoards = ComputeNeededBoards(roomSize, boardSize, lossesPercentage);
Assert.AreEqual<uint>(139, neededBoards);
}
private uint ComputeNeededBoards(Size roomSize, Size boardSize, uint lossesPercentage) {
uint boards = GetNeededBoards(roomSize, boardSize);
uint boardsToCoverLosses = GetLosses(boards, lossesPercentage);
return boards + boardsToCoverLosses;
}
private uint GetLosses(uint boards, uint lossesPercentage) {
return (uint)(boards * (lossesPercentage / 100.0));
}
private uint GetNeededBoards(Size roomSize, Size boardSize)
{
uint boardsOnWidth = GetNeededBoardsOnSide(roomSize.length, boardSize.length);
uint boardsOnLength = GetNeededBoardsOnSide(roomSize.width, boardSize.width);
return boardsOnWidth * boardsOnLength;
}
private uint GetNeededBoardsOnSide(uint sideSize, uint boardSide) {
if (sideSize < boardSide && sideSize > 0) {
return 1;
}
if (sideSize == 0) {
return 0;
}
if (boardSide > 0) {
if (sideSize % boardSide == 0) {
return sideSize / boardSide;
} else {
return (sideSize / boardSide) + 1;
}
}
return 0;
}
}
/// <summary>
///
/// </summary>
public struct Size
{
/// <summary>
/// The board length
/// </summary>
public uint length, width;
/// <summary>
/// Initializes a new instance of the <see cref="Board"/> struct.
/// </summary>
/// <param name="length">form length in milimeters.</param>
/// <param name="width">Form width in milimeters.</param>
public Size(uint length, uint width)
{
this.length = length;
this.width = width;
}
}
}