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