tests: add more test cases for LinkedList
This commit is contained in:
parent
c9eba7336c
commit
636d2b21e5
@ -1,45 +1,45 @@
|
||||
----------------------------
|
||||
| Įtaisai |
|
||||
----------------------------
|
||||
| ID | Vardas | Kaina |
|
||||
| ID | Vardas | Kaina |
|
||||
----------------------------
|
||||
| 0 | Atsuktuvas | 0.99 |
|
||||
| 1 | Varztas | 0.05 |
|
||||
| 2 | Laidas | 2.00 |
|
||||
| 3 | Plaktukas | 2.99 |
|
||||
| 0 | Atsuktuvas | 0.99 |
|
||||
| 1 | Varztas | 0.05 |
|
||||
| 2 | Laidas | 2.00 |
|
||||
| 3 | Plaktukas | 2.99 |
|
||||
----------------------------
|
||||
|
||||
--------------------------------------------------
|
||||
| Pirkėjai |
|
||||
--------------------------------------------------
|
||||
| Pavardė | Vardas | Įtaisas | Įtaiso kiekis |
|
||||
| Pavardė | Vardas | Įtaisas | Įtaiso kiekis |
|
||||
--------------------------------------------------
|
||||
| Petraitis | Petras | 0 | 10 |
|
||||
| Petraitis | Petras | 1 | 10 |
|
||||
| Jonaitis | Jonas | 1 | 20 |
|
||||
| Jonaitis | Jonas | 1 | 20 |
|
||||
| Jonaitis | Jonas | 1 | 20 |
|
||||
| Onaite | Ona | 2 | 200 |
|
||||
| Jonaitis | Brolis | 1 | 100 |
|
||||
| Jonaitis | Brolis | 0 | 100 |
|
||||
| Jonaitis | Jonas | 1 | 20 |
|
||||
| Jonaitis | Jonas | 1 | 20 |
|
||||
| Jonaitis | Jonas | 2 | 20 |
|
||||
| Onaite | Ona | 0 | 20 |
|
||||
| Jonaitis | Jonas | 1 | 20 |
|
||||
| Jonaitis | Jonas | 1 | 20 |
|
||||
| Jonaitis | Jonas | 1 | 20 |
|
||||
| Onaite | Ona | 2 | 200 |
|
||||
| Jonaitis | Brolis | 1 | 100 |
|
||||
| Jonaitis | Brolis | 0 | 100 |
|
||||
| Jonaitis | Jonas | 1 | 20 |
|
||||
| Jonaitis | Jonas | 1 | 20 |
|
||||
| Jonaitis | Jonas | 2 | 20 |
|
||||
| Onaite | Ona | 0 | 20 |
|
||||
--------------------------------------------------
|
||||
|
||||
------------------------------------------------------------
|
||||
| Populiariausi įtaisai |
|
||||
------------------------------------------------------------
|
||||
| ID | Vardas | Įtaisų kiekis, vnt. | Įtaisų kaina, eur. |
|
||||
| ID | Vardas | Įtaisų kiekis, vnt. | Įtaisų kaina, eur. |
|
||||
------------------------------------------------------------
|
||||
| 2 | Laidas | 220 | 440.00 |
|
||||
| 2 | Laidas | 220 | 440.00 |
|
||||
------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------
|
||||
| Vienos rūšies pirkėjai |
|
||||
----------------------------------------------------------
|
||||
| Pavardė | Vardas | Įtaiso kiekis, vnt. | Kaina, eur. |
|
||||
| Pavardė | Vardas | Įtaiso kiekis, vnt. | Kaina, eur. |
|
||||
----------------------------------------------------------
|
||||
| Nėra |
|
||||
----------------------------------------------------------
|
||||
@ -47,9 +47,9 @@
|
||||
----------------------------------
|
||||
| Atrinkti įtaisai (n=1, k=1.00) |
|
||||
----------------------------------
|
||||
| ID | Vardas | Kaina |
|
||||
| ID | Vardas | Kaina |
|
||||
----------------------------------
|
||||
| 0 | Atsuktuvas | 0.99 |
|
||||
| 1 | Varztas | 0.05 |
|
||||
| 0 | Atsuktuvas | 0.99 |
|
||||
| 1 | Varztas | 0.05 |
|
||||
----------------------------------
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@ -124,18 +125,59 @@ namespace LD_24.Code
|
||||
/// <param name="writer">Target file</param>
|
||||
/// <param name="cells">Cell data</param>
|
||||
/// <param name="widths">Cell widths</param>
|
||||
private static void PrintTableRow(StreamWriter writer, List<string> cells, List<int> widths)
|
||||
private static void PrintTableRow(StreamWriter writer, LinkedList<string> cells, LinkedList<int> widths)
|
||||
{
|
||||
for (int i = 0; i < widths.Count; i++)
|
||||
foreach (var tuple in cells.Zip(widths, (a, b) => Tuple.Create(a, b)))
|
||||
{
|
||||
if (widths[i] > 0)
|
||||
writer.Write("| {0} ", cells[i].PadRight(widths[i]));
|
||||
if (tuple.Item1[0] == '-')
|
||||
writer.Write("| {0} ", tuple.Item1.Substring(1).PadRight(tuple.Item2));
|
||||
else
|
||||
writer.Write("| {0} ", cells[i].PadLeft(-widths[i]));
|
||||
writer.Write("| {0} ", tuple.Item1.PadLeft(tuple.Item2));
|
||||
}
|
||||
writer.WriteLine("|");
|
||||
}
|
||||
|
||||
private static LinkedList<int> FindTableWidths(LinkedList<LinkedList<string>> rows, string header, string[] columns)
|
||||
{
|
||||
var allWidths = new Dictionary<int, LinkedList<int>>();
|
||||
|
||||
int o = 0;
|
||||
foreach (var column in columns)
|
||||
{
|
||||
allWidths.Add(o, new LinkedList<int> { column.Length });
|
||||
o++;
|
||||
}
|
||||
|
||||
foreach (var row in rows)
|
||||
{
|
||||
int p = 0;
|
||||
foreach (var cell in row)
|
||||
{
|
||||
allWidths[p].Add(cell.Length);
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
var widths = new LinkedList<int>();
|
||||
int totalWidth = 3 * (columns.Length - 1);
|
||||
foreach (var columnWidths in allWidths.Values)
|
||||
{
|
||||
int width = columnWidths.Max();
|
||||
totalWidth += width;
|
||||
widths.Add(width);
|
||||
}
|
||||
|
||||
// If the header is longer than the body, make the last column wider.
|
||||
// So the table is a nice rectangle when output to the file
|
||||
if (header.Length > totalWidth)
|
||||
{
|
||||
// Make the last column a bit wider so everything lines up
|
||||
widths.Add(widths.RemoveLast() + header.Length - totalWidth);
|
||||
}
|
||||
|
||||
return widths;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Print a table to a file
|
||||
/// </summary>
|
||||
@ -144,58 +186,28 @@ namespace LD_24.Code
|
||||
/// <param name="list">Target list</param>
|
||||
/// <param name="columns">Column names</param>
|
||||
/// <returns>A IEnumerable for inserting values for each row</returns>
|
||||
private static IEnumerable<Tuple<T, List<string>>> PrintTable<T>(StreamWriter writer, string header, IEnumerable<T> list, params string[] columns)
|
||||
private static IEnumerable<Tuple<T, LinkedList<string>>> PrintTable<T>(StreamWriter writer, string header, IEnumerable<T> list, params string[] columns)
|
||||
{
|
||||
// 0. Collect all the rows
|
||||
List<List<string>> rows = new List<List<string>>();
|
||||
// 1. Collect all the rows
|
||||
LinkedList<LinkedList<string>> rows = new LinkedList<LinkedList<string>>();
|
||||
foreach (T item in list)
|
||||
{
|
||||
List<string> row = new List<string>();
|
||||
var row = new LinkedList<string>();
|
||||
yield return Tuple.Create(item, row);
|
||||
rows.Add(row);
|
||||
}
|
||||
|
||||
// 1. Determine the width of each column
|
||||
List<int> widths = new List<int>();
|
||||
int totalWidth = 3*(columns.Length - 1);
|
||||
for (int i = 0; i < columns.Length; i++)
|
||||
{
|
||||
int width = columns[i].Length;
|
||||
foreach (var row in rows)
|
||||
{
|
||||
width = Math.Max(row[i].Length, width);
|
||||
}
|
||||
widths.Add(width);
|
||||
totalWidth += width;
|
||||
}
|
||||
|
||||
// If the header is longer than the body, make the last column wider.
|
||||
// So the table is a nice rectangle when output to the file
|
||||
if (header.Length > totalWidth)
|
||||
{
|
||||
widths[widths.Count - 1] += (header.Length - totalWidth);
|
||||
totalWidth = header.Length;
|
||||
}
|
||||
|
||||
totalWidth += 2 * 2;
|
||||
|
||||
// 2. Adjust widths to account for aligning
|
||||
for (int i = 0; i < columns.Length; i++)
|
||||
{
|
||||
if (columns[i][0] == '-')
|
||||
{
|
||||
widths[i] = -widths[i];
|
||||
columns[i] = columns[i].Substring(1);
|
||||
}
|
||||
}
|
||||
// 2. Determine the width of each column
|
||||
var widths = FindTableWidths(rows, header, columns);
|
||||
int totalWidth = 3 * (columns.Length - 1) + 2 * 2 + widths.Sum();
|
||||
|
||||
// 3. Display the table
|
||||
writer.WriteLine(new string('-', totalWidth));
|
||||
writer.WriteLine("| {0} |", header.PadRight(totalWidth - 4));
|
||||
writer.WriteLine(new string('-', totalWidth));
|
||||
PrintTableRow(writer, new List<string>(columns), widths);
|
||||
PrintTableRow(writer, new LinkedList<string>(columns), widths);
|
||||
writer.WriteLine(new string('-', totalWidth));
|
||||
if (rows.Count > 0)
|
||||
if (!rows.IsEmpty())
|
||||
{
|
||||
foreach (var row in rows)
|
||||
{
|
||||
@ -221,7 +233,7 @@ namespace LD_24.Code
|
||||
foreach (var tuple in PrintTable(writer, header, orders, "Pavardė", "Vardas", "-Įtaisas", "-Įtaiso kiekis"))
|
||||
{
|
||||
Order order = tuple.Item1;
|
||||
List<string> row = tuple.Item2;
|
||||
var row = tuple.Item2;
|
||||
row.Add(order.CustomerSurname);
|
||||
row.Add(order.CustomerName);
|
||||
row.Add(order.ProductID);
|
||||
@ -241,7 +253,7 @@ namespace LD_24.Code
|
||||
foreach (var tuple in PrintTable(writer, header, orders, "Pavardė", "Vardas", "-Įtaiso kiekis, vnt.", "-Kaina, eur."))
|
||||
{
|
||||
Order order = tuple.Item1;
|
||||
List<string> row = tuple.Item2;
|
||||
var row = tuple.Item2;
|
||||
Product product = TaskUtils.FindByID(products, order.ProductID);
|
||||
|
||||
row.Add(order.CustomerSurname);
|
||||
@ -262,7 +274,7 @@ namespace LD_24.Code
|
||||
foreach (var tuple in PrintTable(writer, header, products, "ID", "Vardas", "-Kaina"))
|
||||
{
|
||||
Product product = tuple.Item1;
|
||||
List<string> row = tuple.Item2;
|
||||
var row = tuple.Item2;
|
||||
row.Add(product.ID);
|
||||
row.Add(product.Name);
|
||||
row.Add(string.Format("{0:f2}", product.Price));
|
||||
@ -281,7 +293,7 @@ namespace LD_24.Code
|
||||
foreach (var tuple in PrintTable(writer, header, popularProducts, "ID", "Vardas", "-Įtaisų kiekis, vnt.", "-Įtaisų kaina, eur."))
|
||||
{
|
||||
Product product = tuple.Item1;
|
||||
List<string> row = tuple.Item2;
|
||||
var row = tuple.Item2;
|
||||
int sales = TaskUtils.CountProductSales(orders, product.ID);
|
||||
row.Add(product.ID);
|
||||
row.Add(product.Name);
|
||||
|
@ -6,8 +6,12 @@ using System.Web;
|
||||
|
||||
namespace LD_24.Code
|
||||
{
|
||||
public class LinkedList<T> : IEnumerable<T>
|
||||
where T: IComparable<T>, IEquatable<T>
|
||||
/// <summary>
|
||||
/// Generic linked list class. Used for storing a list of values.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Target type</typeparam>
|
||||
public class LinkedList<T> : IEnumerable<T>, IComparable<LinkedList<T>>, IEquatable<LinkedList<T>>
|
||||
where T : IComparable<T>, IEquatable<T>
|
||||
{
|
||||
class Node
|
||||
{
|
||||
@ -24,9 +28,32 @@ namespace LD_24.Code
|
||||
private Node head;
|
||||
private Node tail;
|
||||
|
||||
public void Add(T customer)
|
||||
/// <summary>
|
||||
/// Creates an empty linked list
|
||||
/// </summary>
|
||||
public LinkedList()
|
||||
{
|
||||
Node node = new Node(customer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an clone of a given enumerable value/list
|
||||
/// </summary>
|
||||
/// <param name="other">Cloned enumerable</param>
|
||||
public LinkedList(IEnumerable<T> other)
|
||||
{
|
||||
foreach (var value in other)
|
||||
{
|
||||
Add(value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a single element to the linked list
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
public void Add(T value)
|
||||
{
|
||||
Node node = new Node(value);
|
||||
if (tail != null && head != null)
|
||||
{
|
||||
tail.Next = node;
|
||||
@ -39,6 +66,62 @@ namespace LD_24.Code
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes the last element from this list
|
||||
/// </summary>
|
||||
/// <returns>The last elements values or the default value if empty</returns>
|
||||
public T RemoveLast()
|
||||
{
|
||||
if (head == null)
|
||||
{
|
||||
return default;
|
||||
}
|
||||
|
||||
Node prev = null;
|
||||
Node current = head;
|
||||
while (current.Next != null)
|
||||
{
|
||||
prev = current;
|
||||
current = current.Next;
|
||||
}
|
||||
|
||||
if (prev != null)
|
||||
{
|
||||
prev.Next = null;
|
||||
tail = prev;
|
||||
}
|
||||
|
||||
if (prev == null)
|
||||
{
|
||||
head = null;
|
||||
tail = null;
|
||||
}
|
||||
|
||||
return current.Data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the first element
|
||||
/// </summary>
|
||||
/// <returns>The first element</returns>
|
||||
public T GetFirst()
|
||||
{
|
||||
return head != null ? head.Data : default;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the first element
|
||||
/// </summary>
|
||||
/// <returns>The first element</returns>
|
||||
public T GetLast()
|
||||
{
|
||||
return tail != null ? tail.Data : default;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Count how many elemnts are stored in this list
|
||||
/// </summary>
|
||||
/// <returns>Number of stored elements</returns>
|
||||
public int Count()
|
||||
{
|
||||
int count = 0;
|
||||
@ -49,11 +132,19 @@ namespace LD_24.Code
|
||||
return count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the linked list is empty,
|
||||
/// what did you expect?
|
||||
/// </summary>
|
||||
/// <returns>A boolean</returns>
|
||||
public bool IsEmpty()
|
||||
{
|
||||
return head == null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sorts this linked list
|
||||
/// </summary>
|
||||
public void Sort()
|
||||
{
|
||||
for (Node nodeA = head; nodeA != null; nodeA = nodeA.Next)
|
||||
@ -73,20 +164,99 @@ namespace LD_24.Code
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A human-readable string for debuging purposes
|
||||
/// </summary>
|
||||
/// <returns>Debug string</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format("LinkedList<{0}>{ Count = '{0}' }", Count());
|
||||
return string.Format("LinkedList<{0}>( Count = {0} )", Count());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enumerate over all the elements of the list
|
||||
/// </summary>
|
||||
/// <returns>An enumerator</returns>
|
||||
public IEnumerator<T> GetEnumerator()
|
||||
{
|
||||
for (Node d = head; d != null; d = d.Next)
|
||||
yield return d.Data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enumerate over all the elements of the list
|
||||
/// </summary>
|
||||
/// <returns>An enumerator</returns>
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares the ordering 2 lists
|
||||
/// </summary>
|
||||
/// <param name="other">Other list</param>
|
||||
/// <returns></returns>
|
||||
public int CompareTo(LinkedList<T> other)
|
||||
{
|
||||
var otherEnumerator = other.GetEnumerator();
|
||||
foreach (var value in this)
|
||||
{
|
||||
if (otherEnumerator.MoveNext())
|
||||
{
|
||||
int comparison = value.CompareTo(otherEnumerator.Current);
|
||||
if (comparison != 0)
|
||||
{
|
||||
return comparison;
|
||||
}
|
||||
} else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (otherEnumerator.MoveNext())
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if 2 linked lists have the same values stored
|
||||
/// </summary>
|
||||
/// <param name="other">Other linked list</param>
|
||||
/// <returns>True if they both store the same values</returns>
|
||||
public bool Equals(LinkedList<T> other)
|
||||
{
|
||||
var otherEnumerator = other.GetEnumerator();
|
||||
foreach (var value in this)
|
||||
{
|
||||
if (otherEnumerator.MoveNext())
|
||||
{
|
||||
if (!value.Equals(otherEnumerator.Current))
|
||||
{
|
||||
// This is the case, when some elements in between the lists are different
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// This is the case when the other linked list runs out of values, while this still has more.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (otherEnumerator.MoveNext())
|
||||
{
|
||||
// This is the case, when the other linked list still had some left over values.
|
||||
// That means it had more elements that this one.
|
||||
return false;
|
||||
}
|
||||
|
||||
// This is the case, when everything is the same.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
@ -27,6 +27,13 @@ namespace LD_24.Code
|
||||
/// </summary>
|
||||
public int ProductAmount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new order
|
||||
/// </summary>
|
||||
/// <param name="customerSurname">The customers surname</param>
|
||||
/// <param name="customerName">The customers name</param>
|
||||
/// <param name="productID">Product ID</param>
|
||||
/// <param name="productAmount">Product amount</param>
|
||||
public Order(string customerSurname, string customerName, string productID, int productAmount)
|
||||
{
|
||||
CustomerSurname = customerSurname;
|
||||
@ -35,11 +42,11 @@ namespace LD_24.Code
|
||||
ProductAmount = productAmount;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format("Order{Name = '{0}'}", CustomerName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares the sorting order of this and other.
|
||||
/// </summary>
|
||||
/// <param name="other"></param>
|
||||
/// <returns></returns>
|
||||
public int CompareTo(Order other)
|
||||
{
|
||||
if (ProductAmount > other.ProductAmount)
|
||||
@ -62,6 +69,11 @@ namespace LD_24.Code
|
||||
return Equals(other) ? 0 : -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compare if this order has the same sorting order as another one.
|
||||
/// </summary>
|
||||
/// <param name="other"></param>
|
||||
/// <returns></returns>
|
||||
public bool Equals(Order other)
|
||||
{
|
||||
return CustomerSurname == other.CustomerSurname &&
|
||||
@ -79,5 +91,10 @@ namespace LD_24.Code
|
||||
hashCode = hashCode * -1521134295 + ProductAmount.GetHashCode();
|
||||
return hashCode;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format("Order{Name = '{0}'}", CustomerName);
|
||||
}
|
||||
}
|
||||
}
|
@ -23,6 +23,12 @@ namespace LD_24.Code
|
||||
/// </summary>
|
||||
public decimal Price { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new product
|
||||
/// </summary>
|
||||
/// <param name="iD">ID</param>
|
||||
/// <param name="name">Name</param>
|
||||
/// <param name="price">Price</param>
|
||||
public Product(string iD, string name, decimal price)
|
||||
{
|
||||
ID = iD;
|
||||
@ -30,11 +36,11 @@ namespace LD_24.Code
|
||||
Price = price;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format("Product{ID = '{0}'}", ID);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check if this has the same sorting order as othe product
|
||||
/// </summary>
|
||||
/// <param name="other"></param>
|
||||
/// <returns></returns>
|
||||
public bool Equals(Product other)
|
||||
{
|
||||
return ID == other.ID &&
|
||||
@ -55,5 +61,10 @@ namespace LD_24.Code
|
||||
{
|
||||
return ID.CompareTo(other.ID);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format("Product{ID = '{0}'}", ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,11 +17,21 @@ namespace LD_24
|
||||
{
|
||||
private const string outputFilename = "App_Data/Rezultatai.txt";
|
||||
|
||||
/// <summary>
|
||||
/// Function that runs when the page loads
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
FindControl("ResultsDiv").Visible = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Functions that rusn when the button is clicked
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
protected void Button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
int n = int.Parse(TextBox1.Text);
|
||||
|
@ -1,27 +1,238 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
For more information on how to configure your ASP.NET application, please visit
|
||||
https://go.microsoft.com/fwlink/?LinkId=169433
|
||||
-->
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
|
||||
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
|
||||
</appSettings>
|
||||
<system.web>
|
||||
<compilation debug="true" targetFramework="4.6.1"/>
|
||||
<httpRuntime targetFramework="4.6.1"/>
|
||||
<globalization fileEncoding="utf-8" />
|
||||
<globalization fileEncoding="utf-8"/>
|
||||
</system.web>
|
||||
<system.codedom>
|
||||
<compilers>
|
||||
<compiler language="c#;cs;csharp" extension=".cs"
|
||||
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
|
||||
warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
|
||||
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
|
||||
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
|
||||
warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
|
||||
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
|
||||
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
|
||||
</compilers>
|
||||
</system.codedom>
|
||||
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Xml.XmlSerializer" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Xml.XDocument" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Xml.ReaderWriter" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ValueTuple" publicKeyToken="CC7B13FFCD2DDD51" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading.Timer" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading.Tasks.Parallel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading.Overlapped" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Text.RegularExpressions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Text.Encoding.Extensions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Text.Encoding" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.SecureString" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Principal" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Serialization.Xml" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Serialization.Json" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Numerics" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Extensions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Resources.ResourceManager" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Reflection.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Reflection.Extensions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Reflection" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ObjectModel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Sockets" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Requests" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.NetworkInformation" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Http" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Linq.Queryable" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Linq.Parallel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Linq.Expressions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Linq" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.IO" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.IO.Compression" publicKeyToken="B77A5C561934E089" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Globalization.Extensions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Globalization" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Dynamic.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.Tools" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.Debug" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.Contracts" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Data.Common" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ComponentModel.EventBasedAsync" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ComponentModel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Collections" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Collections.Concurrent" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
|
17
L3/LD_24Tests/IntLinkedList.cs
Normal file
17
L3/LD_24Tests/IntLinkedList.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using LD_24.Code;
|
||||
using Bogus;
|
||||
|
||||
namespace LD_24Tests
|
||||
{
|
||||
public class IntLinkedListTests : LinkedListTests<int>
|
||||
{
|
||||
private readonly Faker faker = new Faker("en");
|
||||
|
||||
protected override int CreateItem()
|
||||
{
|
||||
return faker.Random.Number(100);
|
||||
}
|
||||
}
|
||||
}
|
@ -8,7 +8,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Bogus" Version="34.0.1" />
|
||||
<PackageReference Include="FluentAssertions" Version="6.5.1" />
|
||||
<PackageReference Include="FluentAssertions" Version="6.6.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
|
||||
<PackageReference Include="xunit" Version="2.4.1" />
|
||||
<PackageReference Include="xunit.abstractions" Version="2.0.3" />
|
||||
|
@ -3,71 +3,346 @@ using Xunit;
|
||||
using FluentAssertions;
|
||||
using LD_24.Code;
|
||||
using System.Collections;
|
||||
using System.Linq;
|
||||
|
||||
namespace LD_24Tests
|
||||
{
|
||||
public abstract class LinkedListTests<T>
|
||||
where T : IComparable<T>, IEquatable<T>
|
||||
{
|
||||
protected abstract LinkedList<T> CreateNewList();
|
||||
protected abstract T CreateItem();
|
||||
|
||||
[Fact]
|
||||
public void New_List_Is_Empty()
|
||||
private LinkedList<T> CreateLoadedList(int count)
|
||||
{
|
||||
LinkedList<T> list = CreateNewList();
|
||||
|
||||
list.IsEmpty().Should().BeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Assert_List_Is_Not_Empty()
|
||||
{
|
||||
LinkedList<T> list = CreateNewList();
|
||||
|
||||
list.Add(CreateItem());
|
||||
|
||||
list.IsEmpty().Should().BeFalse();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Retrieve_How_Many_Were_Added(int count)
|
||||
{
|
||||
LinkedList<T> list = CreateNewList();
|
||||
var list = new LinkedList<T>();
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
list.Add(CreateItem());
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
[Trait("TestedMethod", "Constructor")]
|
||||
public void CreatingList_Shouldnt_Throw()
|
||||
{
|
||||
Action action = () => new LinkedList<T>();
|
||||
|
||||
action.Should().NotThrow();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "Constructor")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void CreateList_From_Other_List(int count)
|
||||
{
|
||||
var list = CreateLoadedList(count);
|
||||
var newList = new LinkedList<T>(list);
|
||||
|
||||
list.Equals(newList).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "Add")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Adding_Should_Not_Throw(int count)
|
||||
{
|
||||
LinkedList<T> list = CreateLoadedList(count);
|
||||
Action task = () => list.Add(CreateItem());
|
||||
|
||||
task.Should().NotThrow();
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
[Trait("TestedMethod", "IsEmpty")]
|
||||
public void New_List_Is_Empty()
|
||||
{
|
||||
LinkedList<T> list = new LinkedList<T>();
|
||||
|
||||
list.IsEmpty().Should().BeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("TestedMethod", "IsEmpty")]
|
||||
public void Assert_List_Is_Not_Empty()
|
||||
{
|
||||
LinkedList<T> list = new LinkedList<T>();
|
||||
list.Add(CreateItem());
|
||||
|
||||
list.IsEmpty().Should().BeFalse();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "IsEmpty")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Is_Empty_Should_Not_Throw(int count)
|
||||
{
|
||||
LinkedList<T> list = CreateLoadedList(count);
|
||||
Action task = () => list.Add(CreateItem());
|
||||
|
||||
task.Should().NotThrow();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "Count")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Retrieve_How_Many_Were_Added(int count)
|
||||
{
|
||||
LinkedList<T> list = CreateLoadedList(count);
|
||||
|
||||
list.Count().Should().Be(count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IEnumerable_Is_Implemented_Correctly()
|
||||
[Trait("TestedMethod", "GetLast")]
|
||||
public void Assert_Last_Element_When_Empty_Doesnt_Throw()
|
||||
{
|
||||
LinkedList<T> list = CreateNewList();
|
||||
LinkedList<T> list = new LinkedList<T>();
|
||||
Func<T> task = () => list.GetLast();
|
||||
|
||||
var item1 = CreateItem();
|
||||
var item2 = CreateItem();
|
||||
var item3 = CreateItem();
|
||||
task.Should().NotThrow();
|
||||
}
|
||||
|
||||
list.Add(item1);
|
||||
list.Add(item2);
|
||||
list.Add(item3);
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "GetLast")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Assert_Last_Element_Value(int count)
|
||||
{
|
||||
var list = CreateLoadedList(count);
|
||||
var last = CreateItem();
|
||||
list.Add(last);
|
||||
|
||||
var newList = new System.Collections.Generic.List<T>();
|
||||
foreach (var item in list)
|
||||
list.GetLast().Should().Be(last);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("TestedMethod", "GetFirst")]
|
||||
public void Assert_First_Element_When_Empty()
|
||||
{
|
||||
LinkedList<T> list = new LinkedList<T>();
|
||||
|
||||
list.GetFirst().Should().Be(default);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("TestedMethod", "GetFirst")]
|
||||
public void Assert_First_Element_When_Empty_Doesnt_Throw()
|
||||
{
|
||||
LinkedList<T> list = new LinkedList<T>();
|
||||
Func<T> task = () => list.GetFirst();
|
||||
|
||||
task.Should().NotThrow();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "GetFirst")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Assert_First_Element_Value(int count)
|
||||
{
|
||||
var list = new LinkedList<T>();
|
||||
var first = CreateItem();
|
||||
list.Add(first);
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
list.Add(CreateItem());
|
||||
|
||||
list.GetFirst().Should().Be(first);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "RemoveLast")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void RemoveLast_Shouldnt_Throw(int count)
|
||||
{
|
||||
var list = CreateLoadedList(count);
|
||||
Action action = () => list.RemoveLast();
|
||||
|
||||
action.Should().NotThrow();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "RemoveLast")]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void RemoveLast_Returns_Removed_Value(int count)
|
||||
{
|
||||
var list = CreateLoadedList(count);
|
||||
var last = list.GetLast();
|
||||
|
||||
list.RemoveLast().Should().Be(last);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "RemoveLast")]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void After_RemoveLast_Length_Should_Decrease(int count)
|
||||
{
|
||||
var list = CreateLoadedList(count);
|
||||
|
||||
list.RemoveLast();
|
||||
list.Count().Should().Be(count-1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("TestedMethod", "RemoveLast")]
|
||||
public void RemoveLast_Does_Nothing_In_Empty_List()
|
||||
{
|
||||
var list = new LinkedList<T>();
|
||||
|
||||
list.RemoveLast();
|
||||
list.Count().Should().Be(0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("TestedMethod", "RemoveLast")]
|
||||
public void RemoveLast_Returns_Default_In_Empty_List()
|
||||
{
|
||||
var list = new LinkedList<T>();
|
||||
|
||||
list.RemoveLast().Should().Be(default);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "IEnumerable")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void IEnumerable_Is_Implemented_Correctly(int count)
|
||||
{
|
||||
var genericList = new System.Collections.Generic.List<T>();
|
||||
LinkedList<T> list = new LinkedList<T>();
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
newList.Add(item);
|
||||
var item = CreateItem();
|
||||
list.Add(item);
|
||||
genericList.Add(item);
|
||||
}
|
||||
|
||||
newList[0].Should().Be(item1);
|
||||
newList[1].Should().Be(item2);
|
||||
newList[2].Should().Be(item3);
|
||||
// Checks the enumerators "list" and "genericList" contain the same values
|
||||
genericList.Zip(list, (a, b) => a.Equals(b)).All((t) => t).Should();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("TestedMethod", "ToString")]
|
||||
public void Assert_ToString_Is_Overridden()
|
||||
{
|
||||
var list = new LinkedList<T>();
|
||||
Assert.True(list.ToString() != list.GetType().ToString());
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "Equals")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Check_If_Lists_Are_Equal(int count)
|
||||
{
|
||||
var list1 = CreateLoadedList(count);
|
||||
var list2 = new LinkedList<T>(list1);
|
||||
|
||||
list1.Equals(list2).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "Equals")]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Check_If_Lists_Arent_Equal(int count)
|
||||
{
|
||||
var list1 = CreateLoadedList(count);
|
||||
var list2 = CreateLoadedList(count);
|
||||
|
||||
list1.Equals(list2).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "Equals")]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Check_If_Lists_Arent_Equal_By_Size(int count)
|
||||
{
|
||||
var list1 = CreateLoadedList(count);
|
||||
var list2 = new LinkedList<T>(list1);
|
||||
list2.RemoveLast();
|
||||
|
||||
list1.Equals(list2).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "Sort")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Sort_Shouldnt_Throw(int count)
|
||||
{
|
||||
var list = CreateLoadedList(count);
|
||||
Action action = () => list.Sort();
|
||||
|
||||
action.Should().NotThrow();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("TestedMethod", "Sort")]
|
||||
public void Sort_Does_Nothing_On_Empty_List()
|
||||
{
|
||||
var list = new LinkedList<T>();
|
||||
var listCopy = new LinkedList<T>(list);
|
||||
list.Sort();
|
||||
|
||||
list.Equals(listCopy).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "Sort")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Items_In_Correct_Order_After_Sort(int count)
|
||||
{
|
||||
var list = CreateLoadedList(count);
|
||||
list.Sort();
|
||||
|
||||
var itemPairs = list.Zip(list.Skip(1), (a, b) => Tuple.Create(a, b));
|
||||
foreach (var tuple in itemPairs)
|
||||
{
|
||||
Assert.True(tuple.Item1.CompareTo(tuple.Item2) >= 0);
|
||||
}
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[Trait("TestedMethod", "Sort")]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(5)]
|
||||
public void Does_Nothing_If_Already_Sorted(int count)
|
||||
{
|
||||
var list = CreateLoadedList(count);
|
||||
list.Sort();
|
||||
|
||||
var listCopy = new LinkedList<T>(list);
|
||||
list.Sort();
|
||||
|
||||
list.Equals(listCopy).Should().BeTrue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,9 +7,8 @@ namespace LD_24Tests
|
||||
{
|
||||
public class OrderLinkedListTests : LinkedListTests<Order>
|
||||
{
|
||||
private Faker faker = new Faker("en");
|
||||
private readonly Faker faker = new Faker("en");
|
||||
|
||||
protected override LinkedList<Order> CreateNewList() => new LinkedList<Order>();
|
||||
protected override Order CreateItem()
|
||||
{
|
||||
string customerSurname = faker.Name.FindName();
|
||||
|
17
L3/LD_24Tests/StringLinkedListTests.cs
Normal file
17
L3/LD_24Tests/StringLinkedListTests.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using Bogus;
|
||||
using LD_24.Code;
|
||||
|
||||
namespace LD_24Tests
|
||||
{
|
||||
public class StringLinkedListTests : LinkedListTests<string>
|
||||
{
|
||||
private readonly Faker faker = new Faker("en");
|
||||
|
||||
protected override string CreateItem()
|
||||
{
|
||||
return faker.Name.FullName();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user