Add sort-into-previous-region emu test
This commit is contained in:
		
							parent
							
								
									13f70be87b
								
							
						
					
					
						commit
						b2d91391b3
					
				| @ -5,6 +5,7 @@ test_emu(flush-overhead.c DISABLED) | ||||
| test_emu(flush.c) | ||||
| test_emu(sort.c SORT) | ||||
| test_emu(sort-flush.c SORT) | ||||
| test_emu(sort-into-previous-region.c SORT DRIVER "sort-into-previous-region.driver.sh") | ||||
| test_emu(empty-sort.c SORT) | ||||
| test_emu(sort-first-and-full-ring.c SORT | ||||
|   SHOULD_FAIL REGEX "cannot find a event previous to clock") | ||||
|  | ||||
							
								
								
									
										74
									
								
								test/emu/ovni/sort-into-previous-region.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								test/emu/ovni/sort-into-previous-region.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,74 @@ | ||||
| /* Copyright (c) 2024 Barcelona Supercomputing Center (BSC)
 | ||||
|  * SPDX-License-Identifier: GPL-3.0-or-later */ | ||||
| 
 | ||||
| #include <stdint.h> | ||||
| #include "compat.h" | ||||
| #include "instr.h" | ||||
| #include "ovni.h" | ||||
| 
 | ||||
| /* Test the case in which events from a secondary unsorted region are
 | ||||
|  * introduced before the previous unsorted region: | ||||
|  * | ||||
|  * [bbbb][BBbb] | ||||
|  * bbbbBB[]bb[] | ||||
|  * | ||||
|  * The events B contain 16 bytes of payload, so pointer to events in previous | ||||
|  * positions are now pointing to garbage. | ||||
|  * | ||||
|  * See: https://pm.bsc.es/gitlab/rarias/ovni/-/issues/199
 | ||||
|  */ | ||||
| 
 | ||||
| static void | ||||
| emit(char *mcv, int64_t clock, int size) | ||||
| { | ||||
| 	struct ovni_ev ev = {0}; | ||||
| 	ovni_ev_set_mcv(&ev, mcv); | ||||
| 	ovni_ev_set_clock(&ev, clock); | ||||
| 
 | ||||
| 	if (size) { | ||||
| 		uint8_t buf[64] = { 0 }; | ||||
| 		ovni_payload_add(&ev, buf, size); | ||||
| 	} | ||||
| 
 | ||||
| 	ovni_ev_emit(&ev); | ||||
| } | ||||
| 
 | ||||
| int | ||||
| main(void) | ||||
| { | ||||
| 	instr_start(0, 1); | ||||
| 
 | ||||
| 	/* Leave some room to prevent clashes */ | ||||
| 	sleep_us(100); /* 100000 us */ | ||||
| 	int64_t t0 = ovni_clock_now(); | ||||
| 	sleep_us(100); /* 100000 us */ | ||||
| 
 | ||||
| 	/* We want it to end like this:
 | ||||
| 	 * | ||||
| 	 * t0  +1  +2  +3  +4  +5  +6  +7  +8  +9  +10 +11 | ||||
| 	 * b   b   b   b   B   B   [   ]   b   b   [   ] | ||||
| 	 * | ||||
| 	 * But we emit it like this: | ||||
| 	 * | ||||
| 	 * +6  +0  +1  +2  +3  +7  +10 +4  +5  +8  +9  +11 | ||||
| 	 * [   b   b   b   b   ]   [   B   B   b   b   ] | ||||
| 	 */ | ||||
| 
 | ||||
| 	emit("OU[", t0 + 6, 0); | ||||
| 	emit("OB.", t0 + 0, 0); | ||||
| 	emit("OB.", t0 + 1, 0); | ||||
| 	emit("OB.", t0 + 2, 0); | ||||
| 	emit("OB.", t0 + 3, 0); | ||||
| 	emit("OU]", t0 + 7, 0); | ||||
| 
 | ||||
| 	emit("OU[", t0 + 10, 0); | ||||
| 	emit("OB.", t0 + 4, 16); | ||||
| 	emit("OB.", t0 + 5, 16); | ||||
| 	emit("OB.", t0 + 8, 0); | ||||
| 	emit("OB.", t0 + 9, 0); | ||||
| 	emit("OU]", t0 + 11, 0); | ||||
| 
 | ||||
| 	instr_end(); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
							
								
								
									
										25
									
								
								test/emu/ovni/sort-into-previous-region.driver.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								test/emu/ovni/sort-into-previous-region.driver.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| target=$OVNI_TEST_BIN | ||||
| 
 | ||||
| $target | ||||
| ovnisort ovni | ||||
| ovnidump ovni | ||||
| ovnidump ovni | awk 'NR == 1 {next} NR==2{t=$1} {print $1-t,$2} NR==13{exit}' > found | ||||
| 
 | ||||
| cat > expected <<EOF | ||||
| 0 OB. | ||||
| 1 OB. | ||||
| 2 OB. | ||||
| 3 OB. | ||||
| 4 OB. | ||||
| 5 OB. | ||||
| 6 OU[ | ||||
| 7 OU] | ||||
| 8 OB. | ||||
| 9 OB. | ||||
| 10 OU[ | ||||
| 11 OU] | ||||
| EOF | ||||
| 
 | ||||
| diff -s found expected | ||||
| 
 | ||||
| ovniemu ovni | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user