From 2aaaf6a66292a6eef10b9bbf2cf5c4af808a53f1 Mon Sep 17 00:00:00 2001 From: Evan Hanson Date: Sat, 18 Apr 2015 18:21:17 +1200 Subject: [PATCH 2/2] Don't consider #t not always-true --- scrutinizer.scm | 2 +- tests/scrutiny-tests.scm | 4 +++ tests/scrutiny.expected | 68 ++++++++++++++++++++++++++---------------------- 3 files changed, 42 insertions(+), 32 deletions(-) diff --git a/scrutinizer.scm b/scrutinizer.scm index b363ccd..6c181cb 100644 --- a/scrutinizer.scm +++ b/scrutinizer.scm @@ -209,7 +209,7 @@ ((or) (every always-true1 (cdr t))) ((forall) (always-true1 (third t))) (else #t))) - ((memq t '(* boolean true false undefined noreturn)) #f) + ((memq t '(* boolean false undefined noreturn)) #f) (else #t))) (define (always-true t loc x) diff --git a/tests/scrutiny-tests.scm b/tests/scrutiny-tests.scm index 81c7c1a..1d12b4c 100644 --- a/tests/scrutiny-tests.scm +++ b/tests/scrutiny-tests.scm @@ -6,6 +6,10 @@ (let ((x (+ 3 4))) (if x 1 2))))) ; expected boolean but got number in conditional +(define (b) + (let ((x #t)) + (if x 1 2))) ; #t is always true + (define (foo x) (if x ; branches return differing number of results (values 1 2) diff --git a/tests/scrutiny.expected b/tests/scrutiny.expected index 2968d69..ebd272f 100644 --- a/tests/scrutiny.expected +++ b/tests/scrutiny.expected @@ -7,16 +7,22 @@ Note: in local procedure `c', (if x 1 2) +Note: in toplevel procedure `b': + expected value of type boolean in conditional but were given a value of type + `true' which is always true: + +(if x 1 2) + Warning: in toplevel procedure `foo': branches in conditional expression differ in the number of results: (if x (values 1 2) (values 1 2 (+ (+ ...)))) Warning: at toplevel: - (scrutiny-tests.scm:15) in procedure call to `bar', expected argument #2 of type `number', but was given an argument of type `symbol' + (scrutiny-tests.scm:19) in procedure call to `bar', expected argument #2 of type `number', but was given an argument of type `symbol' Warning: at toplevel: - (scrutiny-tests.scm:17) in procedure call to `pp', expected 1 argument, but was given 0 arguments + (scrutiny-tests.scm:21) in procedure call to `pp', expected 1 argument, but was given 0 arguments Warning: at toplevel: expected in argument #1 of procedure call `(print (cpu-time))' a single result, but were given 2 results @@ -25,58 +31,58 @@ Warning: at toplevel: expected in argument #1 of procedure call `(print (values))' a single result, but were given zero results Warning: at toplevel: - (scrutiny-tests.scm:23) in procedure call to `x', expected a value of type `(procedure () *)', but was given a value of type `fixnum' + (scrutiny-tests.scm:27) in procedure call to `x', expected a value of type `(procedure () *)', but was given a value of type `fixnum' Warning: at toplevel: - (scrutiny-tests.scm:25) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `symbol' + (scrutiny-tests.scm:29) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `symbol' Warning: at toplevel: - (scrutiny-tests.scm:25) in procedure call to `+', expected argument #2 of type `number', but was given an argument of type `symbol' + (scrutiny-tests.scm:29) in procedure call to `+', expected argument #2 of type `number', but was given an argument of type `symbol' Warning: at toplevel: - assignment of value of type `fixnum' to toplevel variable `car' does not match declared type `(forall (a176) (procedure car ((pair a176 *)) a176))' + assignment of value of type `fixnum' to toplevel variable `car' does not match declared type `(forall (a179) (procedure car ((pair a179 *)) a179))' Warning: at toplevel: - expected in `let' binding of `g8' a single result, but were given 2 results + expected in `let' binding of `g10' a single result, but were given 2 results Warning: at toplevel: - in procedure call to `g8', expected a value of type `(procedure () *)', but was given a value of type `fixnum' + in procedure call to `g10', expected a value of type `(procedure () *)', but was given a value of type `fixnum' Note: in toplevel procedure `foo': expected value of type boolean in conditional but were given a value of type - `(procedure bar30 () *)' which is always true: + `(procedure bar32 () *)' which is always true: (if bar 3 (##core#undefined)) Warning: in toplevel procedure `foo2': - (scrutiny-tests.scm:54) in procedure call to `string-append', expected argument #1 of type `string', but was given an argument of type `number' + (scrutiny-tests.scm:58) in procedure call to `string-append', expected argument #1 of type `string', but was given an argument of type `number' Warning: at toplevel: - (scrutiny-tests.scm:62) in procedure call to `foo3', expected argument #1 of type `string', but was given an argument of type `fixnum' + (scrutiny-tests.scm:66) in procedure call to `foo3', expected argument #1 of type `string', but was given an argument of type `fixnum' Warning: in toplevel procedure `foo4': - (scrutiny-tests.scm:67) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' + (scrutiny-tests.scm:71) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' Warning: in toplevel procedure `foo5': - (scrutiny-tests.scm:73) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' + (scrutiny-tests.scm:77) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' Warning: in toplevel procedure `foo6': - (scrutiny-tests.scm:79) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' + (scrutiny-tests.scm:83) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' Warning: at toplevel: - (scrutiny-tests.scm:86) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' + (scrutiny-tests.scm:90) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' Warning: in toplevel procedure `foo10': - (scrutiny-tests.scm:100) in procedure call to `foo9', expected argument #1 of type `string', but was given an argument of type `number' + (scrutiny-tests.scm:104) in procedure call to `foo9', expected argument #1 of type `string', but was given an argument of type `number' Warning: in toplevel procedure `foo10': - (scrutiny-tests.scm:101) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' + (scrutiny-tests.scm:105) in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' Note: in toplevel procedure `foo10': expression returns a result of type `string', but is declared to return `pair', which is not a subtype Warning: in toplevel procedure `foo10': - (scrutiny-tests.scm:105) in procedure call to `string-append', expected argument #1 of type `string', but was given an argument of type `pair' + (scrutiny-tests.scm:109) in procedure call to `string-append', expected argument #1 of type `string', but was given an argument of type `pair' Warning: in toplevel procedure `foo10': expression returns 2 values but is declared to have a single result @@ -88,10 +94,10 @@ Warning: in toplevel procedure `foo10': expression returns zero values but is declared to have a single result of type `*' Warning: in toplevel procedure `foo10': - (scrutiny-tests.scm:108) in procedure call to `*', expected argument #1 of type `number', but was given an argument of type `string' + (scrutiny-tests.scm:112) in procedure call to `*', expected argument #1 of type `number', but was given an argument of type `string' Warning: in toplevel procedure `foo#blabla': - (scrutiny-tests.scm:133) in procedure call to `+', expected argument #2 of type `number', but was given an argument of type `symbol' + (scrutiny-tests.scm:137) in procedure call to `+', expected argument #2 of type `number', but was given an argument of type `symbol' Warning: at toplevel: use of deprecated `deprecated-procedure' @@ -100,45 +106,45 @@ Warning: at toplevel: use of deprecated `another-deprecated-procedure' - consider `replacement-procedure' Warning: at toplevel: - (scrutiny-tests.scm:158) in procedure call to `apply1', expected argument #2 of type `(list-of number)', but was given an argument of type `(list symbol fixnum fixnum)' + (scrutiny-tests.scm:162) in procedure call to `apply1', expected argument #2 of type `(list-of number)', but was given an argument of type `(list symbol fixnum fixnum)' Warning: at toplevel: - (scrutiny-tests.scm:159) in procedure call to `apply1', expected argument #2 of type `(list-of number)', but was given an argument of type `(list symbol fixnum fixnum)' + (scrutiny-tests.scm:163) in procedure call to `apply1', expected argument #2 of type `(list-of number)', but was given an argument of type `(list symbol fixnum fixnum)' Note: at toplevel: - (scrutiny-tests.scm:172) in procedure call to `fixnum?', the predicate is called with an argument of type + (scrutiny-tests.scm:176) in procedure call to `fixnum?', the predicate is called with an argument of type `fixnum' and will always return true Note: at toplevel: - (scrutiny-tests.scm:180) in procedure call to `symbol?', the predicate is called with an argument of type + (scrutiny-tests.scm:184) in procedure call to `symbol?', the predicate is called with an argument of type `(or char string)' and will always return false Note: at toplevel: - (scrutiny-tests.scm:184) in procedure call to `char-or-string?', the predicate is called with an argument of type + (scrutiny-tests.scm:188) in procedure call to `char-or-string?', the predicate is called with an argument of type `fixnum' and will always return false Note: at toplevel: - (scrutiny-tests.scm:185) in procedure call to `symbol?', the predicate is called with an argument of type + (scrutiny-tests.scm:189) in procedure call to `symbol?', the predicate is called with an argument of type `(or char string)' and will always return false Note: at toplevel: - (scrutiny-tests.scm:186) in procedure call to `string?', the predicate is called with an argument of type + (scrutiny-tests.scm:190) in procedure call to `string?', the predicate is called with an argument of type `fixnum' and will always return false Note: at toplevel: - (scrutiny-tests.scm:190) in procedure call to `symbol?', the predicate is called with an argument of type + (scrutiny-tests.scm:194) in procedure call to `symbol?', the predicate is called with an argument of type `char' and will always return false Note: at toplevel: - (scrutiny-tests.scm:191) in procedure call to `string?', the predicate is called with an argument of type + (scrutiny-tests.scm:195) in procedure call to `string?', the predicate is called with an argument of type `symbol' and will always return false Note: at toplevel: - (scrutiny-tests.scm:195) in procedure call to `symbol?', the predicate is called with an argument of type + (scrutiny-tests.scm:199) in procedure call to `symbol?', the predicate is called with an argument of type `(or char string)' and will always return false Note: at toplevel: - (scrutiny-tests.scm:196) in procedure call to `string?', the predicate is called with an argument of type + (scrutiny-tests.scm:200) in procedure call to `string?', the predicate is called with an argument of type `symbol' and will always return false Warning: redefinition of standard binding: car -- 2.1.4