gem5  v20.1.0.0
atomicio.test.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 The Regents of the University of California
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions are
16  * met: redistributions of source code must retain the above copyright
17  * notice, this list of conditions and the following disclaimer;
18  * redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution;
21  * neither the name of the copyright holders nor the names of its
22  * contributors may be used to endorse or promote products derived from
23  * this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  */
37 
38 #include <gtest/gtest.h>
39 #include <unistd.h>
40 
41 #include <string>
42 
43 #include "base/atomicio.hh"
44 
45 /*
46  * This will test reading from a file with a buffer capable of storing the
47  * entirity of the file.
48  */
49 TEST(AtomicioTest, AtomicReadBigBuffer)
50 {
51  FILE* file;
52  file = tmpfile();
53 
54  std::string file_contents = "This is just some test data to ensure that we"
55  " can read correctly from a file.";
56 
57  fputs(file_contents.c_str(), file);
58  fflush(file);
59  rewind(file);
60 
61  char s[1000];
62 
63  ssize_t size = atomic_read(fileno(file), s, 1000);
64  fclose(file);
65 
66  EXPECT_EQ(file_contents.size(), size);
67  for (unsigned int i = 0; i < size; i++) {
68  EXPECT_EQ(file_contents[i], s[i]);
69  }
70 }
71 
72 /*
73  * This will test reading from a file using a buffer smaller than the file
74  * contents. The buffer should be filled and the remainder left unread.
75  */
76 TEST(AtomicioTest, AtomicReadSmallBuffer)
77 {
78  FILE* file;
79  file = tmpfile();
80 
81  std::string file_contents = "This is just some test data to ensure that we"
82  " can read correctly from a file.";
83 
84  fputs(file_contents.c_str(), file);
85  fflush(file);
86  rewind(file);
87 
88  char s[10];
89 
90  ssize_t size = atomic_read(fileno(file), s, 10);
91  fclose(file);
92 
93  EXPECT_EQ(10, size);
94  for (unsigned int i = 0; i < size; i++) {
95  EXPECT_EQ(file_contents[i], s[i]);
96  }
97 }
98 
99 /*
100  * This tests writing a string to a file via the atomic_write function.
101  */
102 TEST(AtomicioTest, AtomicWrite)
103 {
104  FILE* file;
105  file = tmpfile();
106 
107  std::string file_contents = "This is just some test data to ensure that we"
108  " can write correctly to a file.";
109 
110  ssize_t size = atomic_write(fileno(file),
111  file_contents.c_str(),
112  file_contents.size());
113  fflush(file);
114  rewind(file);
115 
116  EXPECT_EQ(file_contents.size(), size);
117 
118  int c;
119  for (unsigned int i = 0; (c = fgetc(file)) != EOF; i++) {
120  EXPECT_EQ(file_contents[i], (unsigned char)c);
121  }
122 
123  fclose(file);
124 }
TEST
TEST(AtomicioTest, AtomicReadBigBuffer)
Definition: atomicio.test.cc:49
atomicio.hh
ArmISA::i
Bitfield< 7 > i
Definition: miscregs_types.hh:63
EXPECT_EQ
#define EXPECT_EQ(lhs, rhs)
A macro which verifies that lhs and rhs are equal to each other.
Definition: unittest.hh:110
atomic_read
ssize_t atomic_read(int fd, void *s, size_t n)
Definition: atomicio.cc:35
ArmISA::c
Bitfield< 29 > c
Definition: miscregs_types.hh:50
atomic_write
ssize_t atomic_write(int fd, const void *s, size_t n)
Definition: atomicio.cc:64
ArmISA::s
Bitfield< 4 > s
Definition: miscregs_types.hh:556

Generated on Wed Sep 30 2020 14:02:07 for gem5 by doxygen 1.8.17