Merge pull request #200 from ch5oh/master
[mono.git] / mcs / class / corlib / Test / System / ArraySegmentTest.cs
1 // ArraySegmentTest.cs - NUnit Test Cases for the System.ArraySegment class
2 //
3 // Ankit Jain  <jankit@novell.com>
4 // Raja R Harinath  <rharinath@novell.com>
5 // Jensen Somers <jensen.somers@gmail.com>
6 // 
7 // Copyright (C) 2006 Novell, Inc (http://www.novell.com)
8 // 
9
10 #if NET_2_0
11 using NUnit.Framework;
12 using System;
13 using System.Collections.Generic;
14
15 namespace MonoTests.System
16 {
17
18 [TestFixture]
19 public class ArraySegmentTest
20 {
21         public ArraySegmentTest() {}
22
23         [Test]
24         public void CtorTest1 () 
25         {
26                 byte [] b_arr = new byte [4096];
27                 Array arr;
28
29                 ArraySegment<byte> seg = new ArraySegment<byte> (b_arr, 0, b_arr.Length);
30                 Assert.AreEqual (seg.Count, b_arr.Length, "#1");
31                 Assert.AreEqual (seg.Offset, 0, "#2");
32                 
33                 arr = seg.Array;
34                 Assert.AreEqual (arr.Length, 4096, "#5");
35                 
36                 seg = new ArraySegment<byte> (b_arr, 100, b_arr.Length - 100);
37                 Assert.AreEqual (seg.Count, b_arr.Length - 100, "#3");
38                 Assert.AreEqual (seg.Offset, 100, "#4");
39                 
40                 arr = seg.Array;
41                 Assert.AreEqual (arr.Length, 4096, "#5");
42         }
43
44         [Test]
45         public void CtorTest2 ()
46         {
47                 byte [] b_arr = new byte [4096];
48                 ArraySegment<byte> seg = new ArraySegment<byte> (b_arr);
49                 Assert.AreEqual (seg.Count, b_arr.Length, "#6");
50                 Assert.AreEqual (seg.Offset, 0, "#7");
51                 
52                 Array arr = seg.Array;
53                 Assert.AreEqual (arr.Length, 4096, "#8");
54         }
55
56         [Test]
57         public void CtorTest3 ()
58         {
59                 EmptyArraySegTest (0);
60                 EmptyArraySegTest (10);
61         }
62
63         private void EmptyArraySegTest (int len)
64         {
65                 byte [] b_arr = new byte [len];
66
67                 ArraySegment<byte> seg = new ArraySegment<byte> (b_arr, 0, b_arr.Length);
68
69                 Assert.AreEqual (seg.Count, b_arr.Length, "#1 [array len {0}] ", len);
70                 Assert.AreEqual (seg.Offset, 0, "#2 [array len {0}] ", len);
71                 Array arr = seg.Array;
72                 Assert.AreEqual (arr.Length, len, "#3 [array len {0}] ", len);
73                 
74                 seg = new ArraySegment<byte> (b_arr, b_arr.Length, 0);
75                 Assert.AreEqual (seg.Count, 0, "#4 [array len {0}] ", len);
76                 Assert.AreEqual (seg.Offset, b_arr.Length, "#5 [array len {0}] ", len);
77                 arr = seg.Array;
78                 Assert.AreEqual (arr.Length, len, "#6 [array len {0}] ", len);
79
80                 seg = new ArraySegment<byte> (b_arr);
81                 Assert.AreEqual (seg.Count, b_arr.Length, "#7 [array len {0}] ", len);
82                 Assert.AreEqual (seg.Offset, 0, "#8 [array len {0}] ", len);
83                 arr = seg.Array;
84                 Assert.AreEqual (arr.Length, len, "#9 [array len {0}] ", len);
85         }
86
87         [Test]
88         [ExpectedException (typeof (ArgumentException))]
89         public void CtorErrorTest ()
90         {
91                 byte [] arr = new byte [4096];  
92                 ArraySegment<byte> seg = new ArraySegment<byte> (arr, 1, arr.Length);
93         }
94         
95         [Test]
96         [ExpectedException (typeof (ArgumentException))]
97         public void CtorErrorTest2 ()
98         {
99                 byte [] arr = new byte [4096];  
100                 ArraySegment<byte> seg = new ArraySegment<byte> (arr, 0, arr.Length + 2);
101         }
102
103         [Test]
104         [ExpectedException (typeof (ArgumentOutOfRangeException))]
105         public void CtorErrorTest3 ()
106         {
107                 byte [] arr = new byte [4096];  
108                 ArraySegment<byte> seg = new ArraySegment<byte> (arr, -1, arr.Length);
109         }
110
111         [Test]
112         [ExpectedException (typeof (ArgumentOutOfRangeException))]
113         public void CtorErrorTest4 ()
114         {
115                 byte [] arr = new byte [4096];  
116                 ArraySegment<byte> seg = new ArraySegment<byte> (arr, 2, -1);
117         }
118
119         [Test]
120         [ExpectedException (typeof (ArgumentException))]
121         public void CtorErrorTest5 ()
122         {
123                 byte [] arr = new byte [4096];
124                 ArraySegment<byte> seg = new ArraySegment<byte> (arr, 0, arr.Length + 2);
125         }
126
127         [Test]
128         [ExpectedException (typeof (ArgumentNullException))]
129         public void CtorNullTest1 ()
130         {
131                 ArraySegment<byte> seg = new ArraySegment<byte> (null, 0 , 1);
132         }
133
134         [Test]
135         [ExpectedException (typeof (ArgumentNullException))]
136         public void CtorNullTest2 ()
137         {
138                 ArraySegment<byte> seg = new ArraySegment<byte> (null);
139         }
140
141 #pragma warning disable 1718
142         [Test]
143         public void TestArraySegmentEqual ()
144         {
145             string[] myArr_1 = { "The", "good" };
146             string[] myArr_2 = { "The", "good" };
147             
148             ArraySegment<string> myArrSeg_1 = new ArraySegment<string>(myArr_1);
149             ArraySegment<string> myArrSeg_2 = new ArraySegment<string>(myArr_2);
150             
151             // Should return true.
152             Assert.AreEqual(myArrSeg_1.Equals(myArrSeg_1), true);
153             Assert.AreEqual(myArrSeg_1 == myArrSeg_1, true);
154             
155             // Should return false. Allthough the strings are the same.
156             Assert.AreEqual(myArrSeg_1.Equals(myArrSeg_2), false);
157             Assert.AreEqual(myArrSeg_1 == myArrSeg_2, false);
158             
159             // Should return true.
160             Assert.AreEqual(myArrSeg_1 != myArrSeg_2, true);
161         }
162 #pragma warning restore 1718
163 }
164
165 }
166 #endif