source: tests/searchsort.c@ ff5caaf

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr no_list persistent-indexer pthread-emulation qualifiedEnum
Last change on this file since ff5caaf was 73ac10e, checked in by Aaron Moss <a3moss@…>, 7 years ago

Fixed error in searchsort test

  • Property mode set to 100644
File size: 3.9 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// searchsort.c --
8//
9// Author : Peter A. Buhr
10// Created On : Thu Feb 4 18:17:50 2016
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Thu Aug 9 07:54:57 2018
13// Update Count : 101
14//
15
16#include <fstream.hfa>
17#include <stdlib.hfa> // bsearch, qsort
18#include <stdlib.h> // C version of bsearch
19
20int comp( const void * t1, const void * t2 ) { return *(int *)t1 < *(int *)t2 ? -1 : *(int *)t2 < *(int *)t1 ? 1 : 0; }
21
22int main( void ) {
23 const int size = 10;
24 int iarr[size];
25
26 for ( i; 0 ~ size ) {
27 iarr[i] = size - i;
28 sout | iarr[i] | ", ";
29 } // for
30 sout | endl | endl;
31
32 // ascending sort/search by changing < to >
33 qsort( iarr, size );
34 for ( i; 0 ~ size ) {
35 sout | iarr[i] | ", ";
36 } // for
37 sout | endl;
38 for ( i; 0 ~ size ) { // C version
39 int key = size - i;
40 int * v = bsearch( &key, iarr, size, sizeof( iarr[0] ), comp );
41 sout | key | ':' | *v | ", ";
42 } // for
43 sout | endl;
44
45 for ( i; 0 ~ size ) {
46 int * v = bsearch( size - i, iarr, size );
47 sout | size - i | ':' | *v | ", ";
48 } // for
49 sout | endl;
50 for ( i; 0 ~ size ) {
51 unsigned int posn = bsearch( size - i, iarr, size );
52 sout | size - i | ':' | iarr[posn] | ", ";
53 } // for
54 sout | endl | endl;
55
56 // descending sort/search by changing < to >
57 for ( i; 0 ~ size ) {
58 iarr[i] = i + 1;
59 sout | iarr[i] | ", ";
60 } // for
61 sout | endl;
62 {
63 // redefinition of ?<? can't overlap the loop controls:
64 //int ?<?( int x, int y ) { return x > y; }
65 {
66 int (*?<?)(int, int) = ?>?;
67 qsort( iarr, size );
68 }
69 for ( i; 0 ~ size ) {
70 sout | iarr[i] | ", ";
71 } // for
72 sout | endl;
73 for ( i; 0 ~ size ) {
74 int (*?<?)(int, int) = ?>?;
75 int * v = bsearch( size - i, iarr, size );
76 sout | size - i | ':' | *v | ", ";
77 } // for
78 sout | endl;
79 for ( i; 0 ~ size ) {
80 int (*?<?)(int, int) = ?>?;
81 unsigned int posn = bsearch( size - i, iarr, size );
82 sout | size - i | ':' | iarr[posn] | ", ";
83 } // for
84 }
85 sout | endl | endl;
86
87 double darr[size];
88 for ( i; 0 ~ size ) {
89 darr[i] = size - i + 0.5;
90 sout | darr[i] | ", ";
91 } // for
92 sout | endl;
93 qsort( darr, size );
94 for ( i; 0 ~ size ) {
95 sout | darr[i] | ", ";
96 } // for
97 sout | endl;
98 for ( i; 0 ~ size ) {
99 double * v = bsearch( size - i + 0.5, darr, size );
100 sout | size - i + 0.5 | ':' | *v | ", ";
101 } // for
102 sout | endl;
103 for ( i; 0 ~ size ) {
104 unsigned int posn = bsearch( size - i + 0.5, darr, size );
105 sout | size - i + 0.5 | ':' | darr[posn] | ", ";
106 } // for
107 sout | endl | endl;
108
109 struct S { int i, j; } sarr[size];
110 int ?<?( S t1, S t2 ) { return t1.i < t2.i && t1.j < t2.j; }
111 ofstream & ?|?( ofstream & os, S v ) { return os | v.i | ' ' | v.j; }
112 for ( i; 0 ~ size ) {
113 sarr[i].i = size - i;
114 sarr[i].j = size - i + 1;
115 sout | sarr[i] | ", ";
116 } // for
117 sout | endl;
118 qsort( sarr, size );
119 for ( i; 0 ~ size ) {
120 sout | sarr[i] | ", ";
121 } // for
122 sout | endl;
123 for ( i; 0 ~ size ) {
124 S temp = { size - i, size - i + 1 };
125 S * v = bsearch( temp, sarr, size );
126 sout | temp | ':' | *v | ", ";
127 } // for
128 sout | endl;
129 for ( i; 0 ~ size ) {
130 S temp = { size - i, size - i + 1 };
131 unsigned int posn = bsearch( temp, sarr, size );
132 sout | temp | ':' | sarr[posn] | ", ";
133 } // for
134 sout | endl | endl;
135 {
136 int getKey( const S & s ) { return s.j; }
137 for ( i; 0 ~ size ) {
138 sout | sarr[i] | ", ";
139 } // for
140 sout | endl;
141 for ( i; 0 ~ size ) {
142 S * v = bsearch( size - i + 1, sarr, size );
143 sout | size - i + 1 | ':' | *v | ", ";
144 } // for
145 sout | endl;
146 for ( i; 0 ~ size ) {
147 unsigned int posn = bsearch( size - i + 1, sarr, size );
148 sout | size - i + 1 | ':' | sarr[posn] | ", ";
149 } // for
150 sout | endl | endl;
151 }
152} // main
153
154// Local Variables: //
155// tab-width: 4 //
156// compile-command: "cfa searchsort.c" //
157// End: //
Note: See TracBrowser for help on using the repository browser.