source: tests/searchsort.c @ 73ac10e

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsdeferred_resnenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprno_listpersistent-indexerpthread-emulationqualifiedEnum
Last change on this file since 73ac10e was 73ac10e, checked in by Aaron Moss <a3moss@…>, 5 years ago

Fixed error in searchsort test

  • Property mode set to 100644
File size: 3.9 KB
RevLine 
[73abe95]1//
[658f6de0]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.
[73abe95]6//
7// searchsort.c --
8//
[658f6de0]9// Author           : Peter A. Buhr
10// Created On       : Thu Feb  4 18:17:50 2016
11// Last Modified By : Peter A. Buhr
[8f34661]12// Last Modified On : Thu Aug  9 07:54:57 2018
13// Update Count     : 101
[73abe95]14//
[658f6de0]15
[73abe95]16#include <fstream.hfa>
17#include <stdlib.hfa>                                                                           // bsearch, qsort
[f2cdc44]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; }
[658f6de0]21
22int main( void ) {
[73ac10e]23        const int size = 10;
[658f6de0]24        int iarr[size];
25
[73ac10e]26        for ( i; 0 ~ size ) {
[658f6de0]27                iarr[i] = size - i;
28                sout | iarr[i] | ", ";
29        } // for
[f2cdc44]30        sout | endl | endl;
31
32        // ascending sort/search by changing < to >
[658f6de0]33        qsort( iarr, size );
[73ac10e]34        for ( i; 0 ~ size ) {
[658f6de0]35                sout | iarr[i] | ", ";
36        } // for
37        sout | endl;
[73ac10e]38        for ( i; 0 ~ size ) {           // C version
[f2cdc44]39                int key = size - i;
[9c47a47]40                int * v = bsearch( &key, iarr, size, sizeof( iarr[0] ), comp );
41                sout | key | ':' | *v | ", ";
[f2cdc44]42        } // for
43        sout | endl;
[9c47a47]44
[73ac10e]45        for ( i; 0 ~ size ) {
[9c47a47]46                int * v = bsearch( size - i, iarr, size );
47                sout | size - i | ':' | *v | ", ";
[658f6de0]48        } // for
[707446a]49        sout | endl;
[73ac10e]50        for ( i; 0 ~ size ) {
[707446a]51                unsigned int posn = bsearch( size - i, iarr, size );
[9c47a47]52                sout | size - i | ':' | iarr[posn] | ", ";
[707446a]53        } // for
[658f6de0]54        sout | endl | endl;
55
[94980502]56        // descending sort/search by changing < to >
[73ac10e]57        for ( i; 0 ~ size ) {
[94980502]58                iarr[i] = i + 1;
59                sout | iarr[i] | ", ";
60        } // for
61        sout | endl;
62        {
[73ac10e]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 ) {
[94980502]70                        sout | iarr[i] | ", ";
71                } // for
72                sout | endl;
[73ac10e]73                for ( i; 0 ~ size ) {
74                        int (*?<?)(int, int) = ?>?;
[9c47a47]75                        int * v = bsearch( size - i, iarr, size );
76                        sout | size - i | ':' | *v | ", ";
[94980502]77                } // for
[707446a]78                sout | endl;
[73ac10e]79                for ( i; 0 ~ size ) {
80                        int (*?<?)(int, int) = ?>?;
[707446a]81                        unsigned int posn = bsearch( size - i, iarr, size );
[9c47a47]82                        sout | size - i | ':' | iarr[posn] | ", ";
[707446a]83                } // for
[94980502]84        }
85        sout | endl | endl;
86
[658f6de0]87        double darr[size];
[73ac10e]88        for ( i; 0 ~ size ) {
[658f6de0]89                darr[i] = size - i + 0.5;
90                sout | darr[i] | ", ";
91        } // for
92        sout | endl;
93        qsort( darr, size );
[73ac10e]94        for ( i; 0 ~ size ) {
[658f6de0]95                sout | darr[i] | ", ";
96        } // for
97        sout | endl;
[73ac10e]98        for ( i; 0 ~ size ) {
[9c47a47]99                double * v = bsearch( size - i + 0.5, darr, size );
100                sout | size - i + 0.5 | ':' | *v | ", ";
[658f6de0]101        } // for
[707446a]102        sout | endl;
[73ac10e]103        for ( i; 0 ~ size ) {
[707446a]104                unsigned int posn = bsearch( size - i + 0.5, darr, size );
[9c47a47]105                sout | size - i + 0.5 | ':' | darr[posn] | ", ";
[707446a]106        } // for
[658f6de0]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; }
[09687aa]111        ofstream & ?|?( ofstream & os, S v ) { return os | v.i | ' ' | v.j; }
[73ac10e]112        for ( i; 0 ~ size ) {
[658f6de0]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 );
[73ac10e]119        for ( i; 0 ~ size ) {
[658f6de0]120                sout | sarr[i] | ", ";
121        } // for
122        sout | endl;
[73ac10e]123        for ( i; 0 ~ size ) {
[658f6de0]124                S temp = { size - i, size - i + 1 };
[9c47a47]125                S * v = bsearch( temp, sarr, size );
126                sout | temp | ':' | *v | ", ";
[658f6de0]127        } // for
[707446a]128        sout | endl;
[73ac10e]129        for ( i; 0 ~ size ) {
[707446a]130                S temp = { size - i, size - i + 1 };
131                unsigned int posn = bsearch( temp, sarr, size );
[9c47a47]132                sout | temp | ':' | sarr[posn] | ", ";
[707446a]133        } // for
[658f6de0]134        sout | endl | endl;
[9c47a47]135        {
[73ac10e]136                int getKey( const S & s ) { return s.j; }
137                for ( i; 0 ~ size ) {
[9c47a47]138                        sout | sarr[i] | ", ";
139                } // for
140                sout | endl;
[73ac10e]141                for ( i; 0 ~ size ) {
[9c47a47]142                        S * v = bsearch( size - i + 1, sarr, size );
143                        sout | size - i + 1 | ':' | *v | ", ";
144                } // for
145                sout | endl;
[73ac10e]146                for ( i; 0 ~ size ) {
[9c47a47]147                        unsigned int posn = bsearch( size - i + 1, sarr, size );
148                        sout | size - i + 1 | ':' | sarr[posn] | ", ";
149                } // for
150                sout | endl | endl;
151        }
[658f6de0]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.