1#!/bin/sh 2# test splitting into round-robin chunks 3 4# Copyright (C) 2010-2023 Free Software Foundation, Inc. 5 6# This program is free software: you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation, either version 3 of the License, or 9# (at your option) any later version. 10 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15 16# You should have received a copy of the GNU General Public License 17# along with this program. If not, see <https://www.gnu.org/licenses/>. 18 19. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src 20print_ver_ split 21 22# N can be greater than the file size 23# in which case no data is extracted, or empty files are written 24split -n r/10 /dev/null || fail=1 25test "$(stat -c %s x* | uniq -c | sed 's/^ *//; s/ /x/')" = "10x0" || fail=1 26rm x?? 27 28# Ensure --elide-empty-files is honored 29split -e -n r/10 /dev/null || fail=1 30stat x?? 2>/dev/null && fail=1 31 32printf '1\n2\n3\n4\n5\n' > in || framework_failure_ 33 34split -n r/3 in > out || fail=1 35compare /dev/null out || fail=1 36 37split -n r/1/3 in > r1 || fail=1 38split -n r/2/3 in > r2 || fail=1 39split -n r/3/3 in > r3 || fail=1 40 41printf '1\n4\n' > exp-1 42printf '2\n5\n' > exp-2 43printf '3\n' > exp-3 44 45compare exp-1 xaa || fail=1 46compare exp-2 xab || fail=1 47compare exp-3 xac || fail=1 48compare exp-1 r1 || fail=1 49compare exp-2 r2 || fail=1 50compare exp-3 r3 || fail=1 51test -f xad && fail=1 52 53# Test input without trailing \n 54printf '1\n2\n3\n4\n5' | split -n r/2/3 > out 55printf '2\n5' > exp 56compare exp out || fail=1 57 58# Ensure we fall back to appending to a file at a time 59# if we hit the limit for the number of open files. 60rm x* 61(ulimit -n 20 && yes | head -n90 | split -n r/30 ) || fail=1 62test "$(stat -c %s x* | uniq -c | sed 's/^ *//; s/ /x/')" = "30x6" || fail=1 63 64Exit $fail 65