gem5  v21.1.0.2
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 using namespace gem5;
46 
47 /*
48  * This will test reading from a file with a buffer capable of storing the
49  * entirity of the file.
50  */
51 TEST(AtomicioTest, AtomicReadBigBuffer)
52 {
53  FILE* file;
54  file = tmpfile();
55 
56  std::string file_contents = "This is just some test data to ensure that we"
57  " can read correctly from a file.";
58 
59  fputs(file_contents.c_str(), file);
60  fflush(file);
61  rewind(file);
62 
63  char s[1000];
64 
65  ssize_t size = atomic_read(fileno(file), s, 1000);
66  fclose(file);
67 
68  EXPECT_EQ(file_contents.size(), size);
69  for (unsigned int i = 0; i < size; i++) {
70  EXPECT_EQ(file_contents[i], s[i]);
71  }
72 }
73 
74 /*
75  * This will test reading from a file using a buffer smaller than the file
76  * contents. The buffer should be filled and the remainder left unread.
77  */
78 TEST(AtomicioTest, AtomicReadSmallBuffer)
79 {
80  FILE* file;
81  file = tmpfile();
82 
83  std::string file_contents = "This is just some test data to ensure that we"
84  " can read correctly from a file.";
85 
86  fputs(file_contents.c_str(), file);
87  fflush(file);
88  rewind(file);
89 
90  char s[10];
91 
92  ssize_t size = atomic_read(fileno(file), s, 10);
93  fclose(file);
94 
95  EXPECT_EQ(10, size);
96  for (unsigned int i = 0; i < size; i++) {
97  EXPECT_EQ(file_contents[i], s[i]);
98  }
99 }
100 
101 /*
102  * This tests writing a string to a file via the atomic_write function.
103  */
104 TEST(AtomicioTest, AtomicWrite)
105 {
106  FILE* file;
107  file = tmpfile();
108 
109  std::string file_contents = "This is just some test data to ensure that we"
110  " can write correctly to a file.";
111 
112  ssize_t size = atomic_write(fileno(file),
113  file_contents.c_str(),
114  file_contents.size());
115  fflush(file);
116  rewind(file);
117 
118  EXPECT_EQ(file_contents.size(), size);
119 
120  int c;
121  for (unsigned int i = 0; (c = fgetc(file)) != EOF; i++) {
122  EXPECT_EQ(file_contents[i], (unsigned char)c);
123  }
124 
125  fclose(file);
126 }
TEST
TEST(AtomicioTest, AtomicReadBigBuffer)
Definition: atomicio.test.cc:51
atomicio.hh
gem5::ArmISA::i
Bitfield< 7 > i
Definition: misc_types.hh:66
gem5::atomic_read
ssize_t atomic_read(int fd, void *s, size_t n)
Definition: atomicio.cc:38
gem5::ArmISA::s
Bitfield< 4 > s
Definition: misc_types.hh:561
gem5::ArmISA::c
Bitfield< 29 > c
Definition: misc_types.hh:53
gem5::atomic_write
ssize_t atomic_write(int fd, const void *s, size_t n)
Definition: atomicio.cc:67
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: decoder.cc:40

Generated on Tue Sep 21 2021 12:24:52 for gem5 by doxygen 1.8.17