|  | /* | 
|  | * Copyright 2015 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #include "SkTemplates.h" | 
|  | #include "Test.h" | 
|  |  | 
|  | // Tests for some of the helpers in SkTemplates.h | 
|  | static void test_automalloc_realloc(skiatest::Reporter* reporter) { | 
|  | SkAutoSTMalloc<1, int> array; | 
|  |  | 
|  | // test we have a valid pointer, should not crash | 
|  | array[0] = 1; | 
|  | REPORTER_ASSERT(reporter, array[0] == 1); | 
|  |  | 
|  | // using realloc for init | 
|  | array.realloc(1); | 
|  |  | 
|  | array[0] = 1; | 
|  | REPORTER_ASSERT(reporter, array[0] == 1); | 
|  |  | 
|  | // verify realloc can grow | 
|  | array.realloc(2); | 
|  | REPORTER_ASSERT(reporter, array[0] == 1); | 
|  |  | 
|  | // realloc can shrink | 
|  | array.realloc(1); | 
|  | REPORTER_ASSERT(reporter, array[0] == 1); | 
|  |  | 
|  | // should not crash | 
|  | array.realloc(0); | 
|  |  | 
|  | // grow and shrink again | 
|  | array.realloc(10); | 
|  | for (int i = 0; i < 10; i++) { | 
|  | array[i] = 10 - i; | 
|  | } | 
|  | array.realloc(20); | 
|  | for (int i = 0; i < 10; i++) { | 
|  | REPORTER_ASSERT(reporter, array[i] == 10 - i); | 
|  | } | 
|  | array.realloc(10); | 
|  | for (int i = 0; i < 10; i++) { | 
|  | REPORTER_ASSERT(reporter, array[i] == 10 - i); | 
|  | } | 
|  |  | 
|  | array.realloc(1); | 
|  | REPORTER_ASSERT(reporter, array[0] = 10); | 
|  |  | 
|  | // resets mixed with realloc, below stack alloc size | 
|  | array.reset(0); | 
|  | array.realloc(1); | 
|  | array.reset(1); | 
|  |  | 
|  | array[0] = 1; | 
|  | REPORTER_ASSERT(reporter, array[0] == 1); | 
|  |  | 
|  | // reset and realloc > stack size | 
|  | array.reset(2); | 
|  | array.realloc(3); | 
|  | array[0] = 1; | 
|  | REPORTER_ASSERT(reporter, array[0] == 1); | 
|  | array.realloc(1); | 
|  | REPORTER_ASSERT(reporter, array[0] == 1); | 
|  | } | 
|  |  | 
|  | DEF_TEST(Templates, reporter) { | 
|  | test_automalloc_realloc(reporter); | 
|  | } |