1 /* 2 * Copyright 2015 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkTemplates.h" 9 #include "Test.h" 10 11 // Tests for some of the helpers in SkTemplates.h 12 static void test_automalloc_realloc(skiatest::Reporter* reporter) { 13 SkAutoSTMalloc<1, int> array; 14 15 // test we have a valid pointer, should not crash 16 array[0] = 1; 17 REPORTER_ASSERT(reporter, array[0] == 1); 18 19 // using realloc for init 20 array.realloc(1); 21 22 array[0] = 1; 23 REPORTER_ASSERT(reporter, array[0] == 1); 24 25 // verify realloc can grow 26 array.realloc(2); 27 REPORTER_ASSERT(reporter, array[0] == 1); 28 29 // realloc can shrink 30 array.realloc(1); 31 REPORTER_ASSERT(reporter, array[0] == 1); 32 33 // should not crash 34 array.realloc(0); 35 36 // grow and shrink again 37 array.realloc(10); 38 for (int i = 0; i < 10; i++) { 39 array[i] = 10 - i; 40 } 41 array.realloc(20); 42 for (int i = 0; i < 10; i++) { 43 REPORTER_ASSERT(reporter, array[i] == 10 - i); 44 } 45 array.realloc(10); 46 for (int i = 0; i < 10; i++) { 47 REPORTER_ASSERT(reporter, array[i] == 10 - i); 48 } 49 50 array.realloc(1); 51 REPORTER_ASSERT(reporter, array[0] = 10); 52 53 // resets mixed with realloc, below stack alloc size 54 array.reset(0); 55 array.realloc(1); 56 array.reset(1); 57 58 array[0] = 1; 59 REPORTER_ASSERT(reporter, array[0] == 1); 60 61 // reset and realloc > stack size 62 array.reset(2); 63 array.realloc(3); 64 array[0] = 1; 65 REPORTER_ASSERT(reporter, array[0] == 1); 66 array.realloc(1); 67 REPORTER_ASSERT(reporter, array[0] == 1); 68 } 69 70 DEF_TEST(Templates, reporter) { 71 test_automalloc_realloc(reporter); 72 } 73