diff --git a/meson.build b/meson.build index 41748b149..e9ce6d58f 100644 --- a/meson.build +++ b/meson.build @@ -1287,6 +1287,8 @@ mod_and_m_tests = [ { 'test' : [ 'deterministic_simulations/rbc_det2.mod' ] }, { 'test' : [ 'deterministic_simulations/rbc_det3.mod' ] }, { 'test' : [ 'deterministic_simulations/rbc_det4.mod' ] }, + { 'test' : [ 'deterministic_simulations/rbc_det4_endval_initval_xfail.mod' ], + 'should_fail' : true }, { 'test' : [ 'deterministic_simulations/rbc_det5.mod' ] }, { 'test' : [ 'deterministic_simulations/rbc_det6.mod' ] }, { 'test' : [ 'deterministic_simulations/homotopy.mod' ] }, diff --git a/preprocessor b/preprocessor index 63f04636e..ac35ef610 160000 --- a/preprocessor +++ b/preprocessor @@ -1 +1 @@ -Subproject commit 63f04636ee848b3c70905e3f78dd51ba25cfc506 +Subproject commit ac35ef610143695ec5e1e9b74a8fdff4803b6ac0 diff --git a/tests/deterministic_simulations/rbc_det4_endval_initval_xfail.mod b/tests/deterministic_simulations/rbc_det4_endval_initval_xfail.mod new file mode 100644 index 000000000..e40c4f269 --- /dev/null +++ b/tests/deterministic_simulations/rbc_det4_endval_initval_xfail.mod @@ -0,0 +1,86 @@ +// Checks that having an initval after an endval block triggers an error +// See preprocessor#104 + +var Capital, Output, Labour, Consumption, Efficiency, efficiency, ExpectedTerm; + +varexo EfficiencyInnovation; + +parameters beta, theta, tau, alpha, psi, delta, rho, effstar, sigma2; + +beta = 0.9900; +theta = 0.3570; +tau = 2.0000; +alpha = 0.4500; +psi = -0.1000; +delta = 0.0200; +rho = 0.8000; +effstar = 1.0000; +sigma2 = 0; + +model(block,bytecode,cutoff=0); + + // Eq. n°1: + efficiency = rho*efficiency(-1) + EfficiencyInnovation; + + // Eq. n°2: + Efficiency = effstar*exp(efficiency); + + // Eq. n°3: + Output = Efficiency*(alpha*(Capital(-1)^psi)+(1-alpha)*(Labour^psi))^(1/psi); + + // Eq. n°4: + Capital = Output-Consumption + (1-delta)*Capital(-1); + + // Eq. n°5: + ((1-theta)/theta)*(Consumption/(1-Labour)) - (1-alpha)*(Output/Labour)^(1-psi); + + // Eq. n°6: + (((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption = ExpectedTerm(1); + + // Eq. n°7: + ExpectedTerm = beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption)*(alpha*((Output/Capital(-1))^(1-psi))+(1-delta)); + +end; + +steady_state_model; +efficiency = EfficiencyInnovation/(1-rho); +Efficiency = effstar*exp(efficiency); +Output_per_unit_of_Capital=((1/beta-1+delta)/alpha)^(1/(1-psi)); +Consumption_per_unit_of_Capital=Output_per_unit_of_Capital-delta; +Labour_per_unit_of_Capital=(((Output_per_unit_of_Capital/Efficiency)^psi-alpha)/(1-alpha))^(1/psi); +Output_per_unit_of_Labour=Output_per_unit_of_Capital/Labour_per_unit_of_Capital; +Consumption_per_unit_of_Labour=Consumption_per_unit_of_Capital/Labour_per_unit_of_Capital; + +% Compute steady state share of capital. +ShareOfCapital=alpha/(alpha+(1-alpha)*Labour_per_unit_of_Capital^psi); + +% Compute steady state of the endogenous variables. +Labour=1/(1+Consumption_per_unit_of_Labour/((1-alpha)*theta/(1-theta)*Output_per_unit_of_Labour^(1-psi))); +Consumption=Consumption_per_unit_of_Labour*Labour; +Capital=Labour/Labour_per_unit_of_Capital; +Output=Output_per_unit_of_Capital*Capital; +ExpectedTerm=beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption) + *(alpha*((Output/Capital)^(1-psi))+1-delta); +end; + +endval; +EfficiencyInnovation = (1-rho)*log(1.05); +end; + +steady; + +initval; +EfficiencyInnovation = 0; +end; + +steady; + +perfect_foresight_setup(periods=300); +perfect_foresight_solver; + +if ~oo_.deterministic_simulation.status + error('Perfect foresight simulation failed') +end + +rplot Consumption; +rplot Capital;