1badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati#include <gtest/gtest.h> 2badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati 3badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati#include "AllocationTestHarness.h" 4badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati 5c196f214c5ae349ec2022f8d3cbaf56910b3b9f8Pavlin Radoslavov#include "osi/include/array.h" 6badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati 7badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavaticlass ArrayTest : public AllocationTestHarness {}; 8badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati 9badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil NanavatiTEST_F(ArrayTest, test_new_free_simple) { 10b55040cc6448a8847490da807d2b6362aa8cb8d9Myles Watson array_t* array = array_new(4); 11badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati ASSERT_TRUE(array != NULL); 12badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati array_free(array); 13badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati} 14badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati 15b55040cc6448a8847490da807d2b6362aa8cb8d9Myles WatsonTEST_F(ArrayTest, test_free_null) { array_free(NULL); } 16badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati 17badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil NanavatiTEST_F(ArrayTest, test_invalid_ptr) { 18b55040cc6448a8847490da807d2b6362aa8cb8d9Myles Watson array_t* array = array_new(4); 19badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati EXPECT_DEATH(array_ptr(array), ""); 20badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati array_free(array); 21badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati} 22badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati 23badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil NanavatiTEST_F(ArrayTest, test_invalid_at) { 24b55040cc6448a8847490da807d2b6362aa8cb8d9Myles Watson array_t* array = array_new(4); 25badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati EXPECT_DEATH(array_at(array, 1), ""); 26badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati array_free(array); 27badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati} 28badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati 29badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil NanavatiTEST_F(ArrayTest, test_append_value) { 30b55040cc6448a8847490da807d2b6362aa8cb8d9Myles Watson array_t* array = array_new(sizeof(int)); 31badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati for (int i = 0; i < 100; ++i) { 32badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati array_append_value(array, i * i); 33badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati } 34badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati for (int i = 0; i < 100; ++i) { 35b55040cc6448a8847490da807d2b6362aa8cb8d9Myles Watson EXPECT_EQ(*(int*)array_at(array, i), i * i); 36badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati } 37badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati array_free(array); 38badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati} 39badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati 40badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil NanavatiTEST_F(ArrayTest, test_append_ptr) { 41badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati int items[100]; 42b55040cc6448a8847490da807d2b6362aa8cb8d9Myles Watson array_t* array = array_new(sizeof(int)); 43badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati for (int i = 0; i < 100; ++i) { 44badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati items[i] = i * i; 45badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati array_append_ptr(array, &items[i]); 46badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati } 47badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati for (int i = 0; i < 100; ++i) { 48b55040cc6448a8847490da807d2b6362aa8cb8d9Myles Watson EXPECT_EQ(*(int*)array_at(array, i), i * i); 49badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati } 50badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati array_free(array); 51badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati} 52badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati 53badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil NanavatiTEST_F(ArrayTest, test_large_element) { 54badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati char strings[][128] = { 55b55040cc6448a8847490da807d2b6362aa8cb8d9Myles Watson "string 1", "string 2", "string 3", "string 4", 56b55040cc6448a8847490da807d2b6362aa8cb8d9Myles Watson "string 5", "string 6", "string 7", "string 8", 57badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati }; 58badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati 59b55040cc6448a8847490da807d2b6362aa8cb8d9Myles Watson array_t* array = array_new(128); 60badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati for (int i = 0; i < 100; ++i) { 61badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati array_append_ptr(array, strings[i % 8]); 62badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati } 63badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati for (int i = 0; i < 100; ++i) { 64badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati EXPECT_TRUE(!memcmp(array_at(array, i), strings[i % 8], 128)); 65badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati } 66badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati array_free(array); 67badeb92ca9a17f6bbc9e69ccaf5943aeec09fc4eSharvil Nanavati} 68