@@ -271,29 +271,44 @@ public void TestIndexer()
271
271
[ Fact ]
272
272
public void ColumnAndTableCreationTest ( )
273
273
{
274
- DataFrameColumn intColumn = new PrimitiveDataFrameColumn < int > ( "IntColumn" , Enumerable . Range ( 0 , 10 ) . Select ( x => x ) ) ;
275
- DataFrameColumn floatColumn = new PrimitiveDataFrameColumn < float > ( "FloatColumn" , Enumerable . Range ( 0 , 10 ) . Select ( x => ( float ) x ) ) ;
274
+ const int rowCount = 10 ;
275
+ DataFrameColumn intColumn = new PrimitiveDataFrameColumn < int > ( "IntColumn" , Enumerable . Range ( 0 , rowCount ) . Select ( x => x ) ) ;
276
+ DataFrameColumn floatColumn = new PrimitiveDataFrameColumn < float > ( "FloatColumn" , Enumerable . Range ( 0 , rowCount ) . Select ( x => ( float ) x ) ) ;
276
277
DataFrame dataFrame = new DataFrame ( ) ;
277
278
dataFrame . Columns . Insert ( 0 , intColumn ) ;
278
279
dataFrame . Columns . Insert ( 1 , floatColumn ) ;
279
- Assert . Equal ( 10 , dataFrame . Rows . Count ) ;
280
+ Assert . Equal ( rowCount , dataFrame . Rows . Count ) ;
280
281
Assert . Equal ( 2 , dataFrame . Columns . Count ) ;
281
- Assert . Equal ( 10 , dataFrame . Columns [ 0 ] . Length ) ;
282
+ Assert . Equal ( 2 , dataFrame . Columns . LongCount ( ) ) ;
283
+ Assert . Equal ( rowCount , dataFrame . Columns [ 0 ] . Length ) ;
282
284
Assert . Equal ( "IntColumn" , dataFrame . Columns [ 0 ] . Name ) ;
283
- Assert . Equal ( 10 , dataFrame . Columns [ 1 ] . Length ) ;
285
+ Assert . Equal ( rowCount , dataFrame . Columns [ 1 ] . Length ) ;
284
286
Assert . Equal ( "FloatColumn" , dataFrame . Columns [ 1 ] . Name ) ;
285
287
286
- DataFrameColumn bigColumn = new PrimitiveDataFrameColumn < float > ( "BigColumn" , Enumerable . Range ( 0 , 11 ) . Select ( x => ( float ) x ) ) ;
287
- DataFrameColumn repeatedName = new PrimitiveDataFrameColumn < float > ( "FloatColumn " , Enumerable . Range ( 0 , 10 ) . Select ( x => ( float ) x ) ) ;
288
+ //add column with bigger length than other columns in the dataframe
289
+ DataFrameColumn bigColumn = new PrimitiveDataFrameColumn < float > ( "BigColumn " , Enumerable . Range ( 0 , rowCount + 1 ) . Select ( x => ( float ) x ) ) ;
288
290
Assert . Throws < ArgumentException > ( ( ) => dataFrame . Columns . Insert ( 2 , bigColumn ) ) ;
291
+ Assert . Throws < ArgumentException > ( ( ) => dataFrame . Columns . Add ( bigColumn ) ) ;
292
+
293
+ //add column smaller than other columns in the dataframe
294
+ DataFrameColumn smallColumn = new PrimitiveDataFrameColumn < float > ( "SmallColumn" , Enumerable . Range ( 0 , rowCount - 1 ) . Select ( x => ( float ) x ) ) ;
295
+ Assert . Throws < ArgumentException > ( ( ) => dataFrame . Columns . Insert ( 2 , smallColumn ) ) ;
296
+ Assert . Throws < ArgumentException > ( ( ) => dataFrame . Columns . Add ( smallColumn ) ) ;
297
+
298
+ //add column with duplicate name
299
+ DataFrameColumn repeatedName = new PrimitiveDataFrameColumn < float > ( "FloatColumn" , Enumerable . Range ( 0 , rowCount ) . Select ( x => ( float ) x ) ) ;
289
300
Assert . Throws < ArgumentException > ( ( ) => dataFrame . Columns . Insert ( 2 , repeatedName ) ) ;
290
- Assert . Throws < ArgumentOutOfRangeException > ( ( ) => dataFrame . Columns . Insert ( 10 , repeatedName ) ) ;
301
+
302
+ //Insert column at index out of range
303
+ DataFrameColumn extraColumn = new PrimitiveDataFrameColumn < float > ( "OtherFloatColumn" , Enumerable . Range ( 0 , rowCount ) . Select ( x => ( float ) x ) ) ;
304
+ var columnCount = dataFrame . Columns . Count ;
305
+ Assert . Throws < ArgumentOutOfRangeException > ( ( ) => dataFrame . Columns . Insert ( columnCount + 1 , repeatedName ) ) ;
291
306
292
307
Assert . Equal ( 2 , dataFrame . Columns . Count ) ;
293
- DataFrameColumn intColumnCopy = new PrimitiveDataFrameColumn < int > ( "IntColumn" , Enumerable . Range ( 0 , 10 ) . Select ( x => x ) ) ;
308
+ DataFrameColumn intColumnCopy = new PrimitiveDataFrameColumn < int > ( "IntColumn" , Enumerable . Range ( 0 , rowCount ) . Select ( x => x ) ) ;
294
309
Assert . Throws < ArgumentException > ( ( ) => dataFrame . Columns [ 1 ] = intColumnCopy ) ;
295
310
296
- DataFrameColumn differentIntColumn = new PrimitiveDataFrameColumn < int > ( "IntColumn1" , Enumerable . Range ( 0 , 10 ) . Select ( x => x ) ) ;
311
+ DataFrameColumn differentIntColumn = new PrimitiveDataFrameColumn < int > ( "IntColumn1" , Enumerable . Range ( 0 , rowCount ) . Select ( x => x ) ) ;
297
312
dataFrame . Columns [ 1 ] = differentIntColumn ;
298
313
Assert . True ( object . ReferenceEquals ( differentIntColumn , dataFrame . Columns [ 1 ] ) ) ;
299
314
@@ -309,18 +324,68 @@ public void ColumnAndTableCreationTest()
309
324
}
310
325
311
326
[ Fact ]
312
- public void InsertAndRemoveColumnTests ( )
327
+ public void InsertAndRemoveColumnToTheEndOfNotEmptyDataFrameTests ( )
313
328
{
314
329
DataFrame dataFrame = MakeDataFrameWithAllMutableColumnTypes ( 10 ) ;
315
- DataFrameColumn intColumn = new PrimitiveDataFrameColumn < int > ( "IntColumn" , Enumerable . Range ( 0 , 10 ) . Select ( x => x ) ) ;
316
- DataFrameColumn charColumn = dataFrame . Columns [ "Char" ] ;
317
- int insertedIndex = dataFrame . Columns . Count ;
318
- dataFrame . Columns . Insert ( dataFrame . Columns . Count , intColumn ) ;
330
+ DataFrameColumn intColumn = new PrimitiveDataFrameColumn < int > ( "NewIntColumn" , Enumerable . Range ( 0 , 10 ) . Select ( x => x ) ) ;
331
+
332
+ int columnCount = dataFrame . Columns . Count ;
333
+ DataFrameColumn originalLastColumn = dataFrame . Columns [ columnCount - 1 ] ;
334
+
335
+ //Insert new column at the end
336
+ dataFrame . Columns . Insert ( columnCount , intColumn ) ;
337
+ Assert . Equal ( columnCount + 1 , dataFrame . Columns . Count ) ;
338
+
339
+ //Remove first
319
340
dataFrame . Columns . RemoveAt ( 0 ) ;
320
- DataFrameColumn intColumn_1 = dataFrame . Columns [ "IntColumn" ] ;
321
- DataFrameColumn charColumn_1 = dataFrame . Columns [ "Char" ] ;
341
+ Assert . Equal ( columnCount , dataFrame . Columns . Count ) ;
342
+
343
+ //Check that int column was inserted
344
+ DataFrameColumn intColumn_1 = dataFrame . Columns [ "NewIntColumn" ] ;
322
345
Assert . True ( ReferenceEquals ( intColumn , intColumn_1 ) ) ;
323
- Assert . True ( ReferenceEquals ( charColumn , charColumn_1 ) ) ;
346
+
347
+ //Check that last column of the original dataframe was not removed
348
+ DataFrameColumn lastColumn_1 = dataFrame . Columns [ originalLastColumn . Name ] ;
349
+ Assert . True ( ReferenceEquals ( originalLastColumn , lastColumn_1 ) ) ;
350
+
351
+ //Check that new column is the last one
352
+ int newIndex = dataFrame . Columns . IndexOf ( "NewIntColumn" ) ;
353
+ Assert . Equal ( columnCount - 1 , newIndex ) ;
354
+
355
+ //Check that original last column now has correct index
356
+ int newIndexForOriginalLastColumn = dataFrame . Columns . IndexOf ( originalLastColumn . Name ) ;
357
+ Assert . Equal ( columnCount - 2 , newIndexForOriginalLastColumn ) ;
358
+ }
359
+
360
+ [ Fact ]
361
+ public void AddAndRemoveColumnToTheEmptyDataFrameTests ( )
362
+ {
363
+ DataFrame dataFrame = new DataFrame ( ) ;
364
+ DataFrameColumn intColumn = new PrimitiveDataFrameColumn < int > ( "NewIntColumn" , Enumerable . Range ( 0 , 10 ) . Select ( x => x ) ) ;
365
+
366
+ dataFrame . Columns . Add ( intColumn ) ;
367
+ Assert . Single ( dataFrame . Columns ) ;
368
+ Assert . Equal ( 10 , dataFrame . Rows . Count ) ;
369
+
370
+ dataFrame . Columns . Remove ( intColumn ) ;
371
+ Assert . Empty ( dataFrame . Columns ) ;
372
+ Assert . Equal ( 0 , dataFrame . Rows . Count ) ;
373
+ }
374
+
375
+ [ Fact ]
376
+ public void ClearColumnsTests ( )
377
+ {
378
+ //Arrange
379
+ DataFrame dataFrame = MakeDataFrameWithAllMutableColumnTypes ( 10 ) ;
380
+
381
+ //Act
382
+ dataFrame . Columns . Clear ( ) ;
383
+
384
+ //Assert
385
+ Assert . Empty ( dataFrame . Columns ) ;
386
+
387
+ Assert . Equal ( 0 , dataFrame . Rows . Count ) ;
388
+ Assert . Equal ( 0 , dataFrame . Columns . LongCount ( ) ) ;
324
389
}
325
390
326
391
[ Fact ]
0 commit comments