Blame test/cdda_interface/toc.c.in

Packit cb6d3d
/*
Packit cb6d3d
  Copyright (C) 2013 Rocky Bernstein <rocky@gnu.org>
Packit cb6d3d
  Copyright (C) 2014 Robert Kausch <robert.kausch@freac.org>
Packit cb6d3d
Packit cb6d3d
  This program is free software: you can redistribute it and/or modify
Packit cb6d3d
  it under the terms of the GNU General Public License as published by
Packit cb6d3d
  the Free Software Foundation, either version 3 of the License, or
Packit cb6d3d
  (at your option) any later version.
Packit cb6d3d
Packit cb6d3d
  This program is distributed in the hope that it will be useful,
Packit cb6d3d
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit cb6d3d
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit cb6d3d
  GNU General Public License for more details.
Packit cb6d3d
Packit cb6d3d
  You should have received a copy of the GNU General Public License
Packit cb6d3d
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit cb6d3d
*/
Packit cb6d3d
Packit cb6d3d
/*
Packit cb6d3d
   Regression test for lib/cdda_interface/toc.c
Packit cb6d3d
Packit cb6d3d
   To compile as s standalone program:
Packit cb6d3d
Packit cb6d3d
 gcc -g3 -Wall -DHAVE_CONFIG_H -I../.. -I../..include toc.c \
Packit cb6d3d
      ../../lib/paranoia/libcdio_paranoia.la ../../lib/cdda_interface/.lib/libcdio_cdda.a -lcdio -o toc
Packit cb6d3d
Packit cb6d3d
*/
Packit cb6d3d
Packit cb6d3d
#ifdef HAVE_CONFIG_H
Packit cb6d3d
#include "config.h"
Packit cb6d3d
#define __CDIO_CONFIG_H__ 1
Packit cb6d3d
#endif
Packit cb6d3d
Packit cb6d3d
#ifdef HAVE_STDIO_H
Packit cb6d3d
#include <stdio.h>
Packit cb6d3d
#endif
Packit cb6d3d
#ifdef HAVE_STDLIB_H
Packit cb6d3d
#include <stdlib.h>
Packit cb6d3d
#endif
Packit cb6d3d
Packit cb6d3d
#include <cdio/paranoia/cdda.h>
Packit cb6d3d
#include <cdio/cd_types.h>
Packit cb6d3d
#include <cdio/logging.h>
Packit cb6d3d
Packit cb6d3d
#ifndef DATA_DIR
Packit cb6d3d
#define DATA_DIR "@srcdir@/../data"
Packit cb6d3d
#endif
Packit cb6d3d
Packit cb6d3d
static void
Packit cb6d3d
log_handler (cdio_log_level_t level, const char message[])
Packit cb6d3d
{
Packit cb6d3d
  switch(level) {
Packit cb6d3d
  case CDIO_LOG_DEBUG:
Packit cb6d3d
  case CDIO_LOG_INFO:
Packit cb6d3d
    return;
Packit cb6d3d
  default:
Packit cb6d3d
    printf("cdio %d message: %s\n", level, message);
Packit cb6d3d
  }
Packit cb6d3d
}
Packit cb6d3d
Packit cb6d3d
static int testit(cdrom_drive_t *d) {
Packit cb6d3d
    track_t t = 0;
Packit cb6d3d
    lsn_t lsn = 0;
Packit cb6d3d
Packit cb6d3d
    /* Check number of tracks.
Packit cb6d3d
     */
Packit cb6d3d
    t = cdda_tracks(d);
Packit cb6d3d
    if (t != 1) {
Packit cb6d3d
	printf("Should have found one track, got %d\n", t);
Packit cb6d3d
	return 1;
Packit cb6d3d
    }
Packit cb6d3d
Packit cb6d3d
    /* Check disc sector reporting.
Packit cb6d3d
     */
Packit cb6d3d
    lsn = cdda_disc_firstsector(d);
Packit cb6d3d
    if ( lsn != 0 ) {
Packit cb6d3d
	printf("Should have gotten 0 as the first sector, got %d.\n", lsn);
Packit cb6d3d
	return 2;
Packit cb6d3d
    }
Packit cb6d3d
Packit cb6d3d
    lsn = cdda_disc_lastsector(d);
Packit cb6d3d
    if ( lsn != 301 ) {
Packit cb6d3d
	printf("Should have gotten 301 as the last sector, got %d.\n", lsn);
Packit cb6d3d
	return 2;
Packit cb6d3d
    }
Packit cb6d3d
Packit cb6d3d
    /* Check pregap sector reporting (should fail here).
Packit cb6d3d
     */
Packit cb6d3d
    lsn = cdda_track_firstsector(d, 0);
Packit cb6d3d
    if ( lsn != -402 ) {
Packit cb6d3d
	printf("Should have gotten error code -402, got %d.\n", lsn);
Packit cb6d3d
	return 3;
Packit cb6d3d
    }
Packit cb6d3d
Packit cb6d3d
    lsn = cdda_track_lastsector(d, 0);
Packit cb6d3d
    if ( lsn != -402 ) {
Packit cb6d3d
	printf("Should have gotten error code -402, got %d.\n", lsn);
Packit cb6d3d
	return 3;
Packit cb6d3d
    }
Packit cb6d3d
Packit cb6d3d
    /* Check track sector reporting.
Packit cb6d3d
     */
Packit cb6d3d
    lsn  = cdda_track_firstsector(d, 1);
Packit cb6d3d
    if ( lsn != 0 ) {
Packit cb6d3d
	printf("Should have gotten 0 as the first sector, got %d.\n", lsn);
Packit cb6d3d
	return 2;
Packit cb6d3d
    }
Packit cb6d3d
Packit cb6d3d
    lsn  = cdda_track_lastsector(d, 1);
Packit cb6d3d
    if ( lsn != 301 ) {
Packit cb6d3d
	printf("Should have gotten 301 as the last sector, got %d.\n", lsn);
Packit cb6d3d
	return 2;
Packit cb6d3d
    }
Packit cb6d3d
Packit cb6d3d
    /* Check sector track reporting.
Packit cb6d3d
     */
Packit cb6d3d
    t = cdda_sector_gettrack(d, 100);
Packit cb6d3d
    if ( 1 != t )  {
Packit cb6d3d
	printf("Should have gotten 1 as the track, got %d.\n", t);
Packit cb6d3d
	return 2;
Packit cb6d3d
    }
Packit cb6d3d
Packit cb6d3d
    t = cdda_sector_gettrack(d, 1000);
Packit cb6d3d
    if ( CDIO_INVALID_TRACK != t )  {
Packit cb6d3d
	printf("Should have gotten CDIO_INVALID_TRACK as the track, got %d.\n", t);
Packit cb6d3d
	return 3;
Packit cb6d3d
    }
Packit cb6d3d
Packit cb6d3d
    return 0;
Packit cb6d3d
}
Packit cb6d3d
Packit cb6d3d
int
Packit cb6d3d
main(int argc, const char *argv[])
Packit cb6d3d
{
Packit cb6d3d
  cdrom_drive_t *d = NULL; /* Place to store handle given by cd-paranoia. */
Packit cb6d3d
  CdIo_t *p_cdio;
Packit cb6d3d
  int rc;
Packit cb6d3d
Packit cb6d3d
  cdio_log_set_handler (log_handler);
Packit cb6d3d
Packit cb6d3d
  if (cdio_have_driver(DRIVER_BINCUE)) {
Packit cb6d3d
      p_cdio = cdio_open("@native_abs_top_srcdir@/test/data/cdda.cue", DRIVER_UNKNOWN);
Packit cb6d3d
  } else if (cdio_have_driver(DRIVER_CDRDAO)) {
Packit cb6d3d
      p_cdio = cdio_open("@native_abs_top_srcdir@/test/data/cdda.toc", DRIVER_UNKNOWN);
Packit cb6d3d
  } else {
Packit cb6d3d
    printf("-- You don't have enough drivers for this test\n");
Packit cb6d3d
    return 77;
Packit cb6d3d
  }
Packit cb6d3d
Packit cb6d3d
  d=cdio_cddap_identify_cdio(p_cdio, CDDA_MESSAGE_PRINTIT, NULL);
Packit cb6d3d
Packit cb6d3d
  if ( !d ) {
Packit cb6d3d
    printf("Should have identified as an audio CD disc.\n");
Packit cb6d3d
    return 1;
Packit cb6d3d
  }
Packit cb6d3d
Packit cb6d3d
  if ( 0 != cdio_cddap_open(d) ) {
Packit cb6d3d
    printf("Unable to open disc.\n");
Packit cb6d3d
    return 2;
Packit cb6d3d
  }
Packit cb6d3d
Packit cb6d3d
  rc = testit(d);
Packit cb6d3d
  cdio_cddap_close_no_free_cdio(d);
Packit cb6d3d
  cdio_destroy(p_cdio);
Packit cb6d3d
Packit cb6d3d
  return rc;
Packit cb6d3d
}