Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nx-libs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dimbor
nx-libs
Commits
1c7abb05
Commit
1c7abb05
authored
Nov 05, 2017
by
Ulrich Sibiller
Committed by
Mihai Moldovan
Feb 27, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Lift record to xorg-server-1.2.0/xorg-server-1.3.0.0 state
parent
0b625990
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
222 deletions
+0
-222
set.c
nx-X11/programs/Xserver/record/set.c
+0
-222
No files found.
nx-X11/programs/Xserver/record/set.c
View file @
1c7abb05
...
...
@@ -44,9 +44,6 @@ from The Open Group.
implemented, and RecordCreateSet will decide heuristically which one
to use based on the set members.
Note: When compiling for use in the server, do not use -DTESTING.
When compiling for stand-alone testing of the set ADT, use -DTESTING.
*/
#ifdef HAVE_DIX_CONFIG_H
...
...
@@ -55,28 +52,7 @@ from The Open Group.
#include <string.h>
#ifndef TESTING
#include "misc.h"
#else
#include <stdio.h>
#include <stdlib.h>
/* stuff that you normally get from the X Server's environment */
typedef
int
Bool
;
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
typedef
unsigned
short
CARD16
;
#ifndef max
#define max(_a, _b) ( ((_a) > (_b)) ? (_a) : (_b) )
#endif
#endif
/* TESTING */
#include "set.h"
static
int
...
...
@@ -417,20 +393,6 @@ bailout:
return
(
RecordSetPtr
)
prls
;
}
#ifdef TESTING
typedef
enum
{
BitVectorImplementation
,
IntervalListImplementation
}
RecordSetImplementation
;
RecordSetImplementation
_RecordSetImpl
;
static
void
_RecordForceSetImplementation
(
setimpl
)
RecordSetImplementation
setimpl
;
{
_RecordSetImpl
=
setimpl
;
}
#endif
typedef
RecordSetPtr
(
*
RecordCreateSetProcPtr
)(
RecordSetInterval
*
pIntervals
,
int
nIntervals
,
...
...
@@ -455,12 +417,8 @@ _RecordSetMemoryRequirements(pIntervals, nIntervals, alignment, ppCreateSet)
&
bma
);
rlsize
=
IntervalListMemoryRequirements
(
pIntervals
,
nIntervals
,
maxMember
,
&
rla
);
#ifdef TESTING
if
(
_RecordSetImpl
==
BitVectorImplementation
)
#else
if
(
(
(
nIntervals
>
1
)
&&
(
maxMember
<=
255
)
)
||
(
bmsize
<
rlsize
)
)
#endif
{
*
alignment
=
bma
;
*
ppCreateSet
=
BitVectorCreateSet
;
...
...
@@ -509,183 +467,3 @@ RecordCreateSet(pIntervals, nIntervals, pMem, memsize)
}
return
(
*
pCreateSet
)(
pIntervals
,
nIntervals
,
pMem
,
size
);
}
/***************************************************************************/
#ifdef TESTING
/*
Test Strategy
Having two set representations is convenient for testing because we
can play them against each other. The test code will be able to
specify which implementation to use. This breaks the encapsulation,
but that seems acceptable for testing. The crux of the test loop
looks like this:
loop:
generate random list of Intervals
create set A using bit vector implementation
create set B using Interval list implementation
for each possible set member
if set A and set B disagree on whether this is a member error;
iterate over both sets, comparing the intervals returned by each.
if intervals or number of intervals are different error;
iterate over intervals of set A
for i = interval.first to interval.last
if i is not a member of set B error;
iterate over intervals of set B
for i = interval.first to interval.last
if i is not a member of set A error;
destroy sets A, B
*/
int
GenerateRandomIntervals
(
pIntervals
,
maxintervals
)
RecordSetInterval
*
pIntervals
;
int
maxintervals
;
{
int
i
,
nIntervals
;
nIntervals
=
rand
()
%
maxintervals
;
for
(
i
=
0
;
i
<
nIntervals
;
i
++
)
{
pIntervals
[
i
].
first
=
rand
();
pIntervals
[
i
].
last
=
pIntervals
[
i
].
first
+
rand
();
}
return
nIntervals
;
}
#define MAXINTERVALS 100
int
main
(
argc
,
argv
)
int
argc
;
char
**
argv
;
{
RecordSetPtr
bs
,
rs
;
RecordSetInterval
br
,
rr
;
RecordSetIteratePtr
bi
,
ri
;
CARD16
i
;
int
testcount
;
RecordSetInterval
intervals
[
MAXINTERVALS
];
int
nIntervals
;
int
bsize
,
rsize
;
int
balign
,
ralign
;
int
pad
;
for
(
testcount
=
0
;
1
;
testcount
++
)
{
nIntervals
=
GenerateRandomIntervals
(
intervals
,
MAXINTERVALS
);
printf
(
"%d nIntervals %d
\n
"
,
testcount
,
nIntervals
);
if
(
testcount
&
1
)
{
_RecordForceSetImplementation
(
BitVectorImplementation
);
bsize
=
RecordSetMemoryRequirements
(
intervals
,
nIntervals
,
&
balign
);
_RecordForceSetImplementation
(
IntervalListImplementation
);
rsize
=
RecordSetMemoryRequirements
(
intervals
,
nIntervals
,
&
ralign
);
pad
=
(
ralign
-
(
bsize
&
(
ralign
-
1
)))
&
(
ralign
-
1
);
bs
=
(
RecordSetPtr
)
malloc
(
bsize
+
pad
+
rsize
);
if
(
!
bs
)
{
fprintf
(
stderr
,
"%d: failed to alloc memory for sets
\n
"
,
testcount
);
continue
;
}
rs
=
(
RecordSetPtr
)(((
char
*
)
bs
)
+
bsize
+
pad
);
}
else
{
bs
=
rs
=
NULL
;
bsize
=
rsize
=
0
;
}
_RecordForceSetImplementation
(
BitVectorImplementation
);
bs
=
RecordCreateSet
(
intervals
,
nIntervals
,
bs
,
bsize
);
_RecordForceSetImplementation
(
IntervalListImplementation
);
rs
=
RecordCreateSet
(
intervals
,
nIntervals
,
rs
,
rsize
);
if
(
!
bs
||
!
rs
)
{
fprintf
(
stderr
,
"%d: failed to create sets
\n
"
,
testcount
);
continue
;
}
for
(
i
=
0
;
i
<
65535
;
i
++
)
{
unsigned
long
b
,
r
;
b
=
RecordIsMemberOfSet
(
bs
,
i
);
r
=
RecordIsMemberOfSet
(
rs
,
i
);
if
(
(
b
&&
!
r
)
||
(
!
b
&&
r
)
)
{
fprintf
(
stderr
,
"%d: isMemberOfSet %d
\n
"
,
testcount
,
(
int
)
i
);
}
}
bi
=
RecordIterateSet
(
bs
,
NULL
,
&
br
);
ri
=
RecordIterateSet
(
rs
,
NULL
,
&
rr
);
while
(
bi
&&
ri
)
{
if
(
(
rr
.
first
!=
br
.
first
)
||
(
rr
.
last
!=
br
.
last
)
)
{
fprintf
(
stderr
,
"%d: iterateSet interval value mismatch
\n
"
,
testcount
);
}
bi
=
RecordIterateSet
(
bs
,
bi
,
&
br
);
ri
=
RecordIterateSet
(
rs
,
ri
,
&
rr
);
}
if
(
bi
!=
ri
)
{
fprintf
(
stderr
,
"%d: iterateSet interval count mismatch
\n
"
,
testcount
);
}
bi
=
NULL
;
while
(
bi
=
RecordIterateSet
(
bs
,
bi
,
&
br
))
{
for
(
i
=
br
.
first
;
i
<=
br
.
last
;
i
++
)
{
if
(
!
RecordIsMemberOfSet
(
rs
,
i
))
{
fprintf
(
stderr
,
"%d: iterateSet b / isMemberOfSet r %d
\n
"
,
testcount
,
(
int
)
i
);
}
}
}
ri
=
NULL
;
while
(
ri
=
RecordIterateSet
(
rs
,
ri
,
&
rr
))
{
for
(
i
=
rr
.
first
;
i
<=
rr
.
last
;
i
++
)
{
if
(
!
RecordIsMemberOfSet
(
bs
,
i
)
)
{
fprintf
(
stderr
,
"%d: iterateSet r / isMemberOfSet b %d
\n
"
,
testcount
,
(
int
)
i
);
}
}
}
RecordDestroySet
(
bs
);
RecordDestroySet
(
rs
);
if
(
testcount
&
1
)
{
free
(
bs
);
}
}
}
#endif
/* TESTING */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment